2017-11-26 1 views
3

Ich habe eine Komponente, die ihre Daten aus dem Abonnement in einem Geschäft erhält.Wie kann ich mich von ngrx/store abmelden?

this.store.select('somedata').subscribe((state: any) => { 
    this.somedata = state.data; 
}); 

Ich möchte aus diesem Abonnement abzubestellen, wenn die Komponente nicht mehr ist, in anderen Orten, wo ich bis zu einem gewissen beobachtbar, so etwas wie dies am abonnieren:

this.service.data.subscribe(
    (result: any) => {//data} 
); 

ich es auf ngOnOnDestroy, wie diese abgemeldet :

ngOnDestroy(){ 
    this.service.data.unsubscribe(); 
} 

Aber im Fall von Speicher ich bin nicht in der Lage, es gibt mir eine Fehlermeldung:

Property 'unsubscribe' does not exist on type 'Store<State>' 

Antwort

6

Wenn Sie abonnieren Sie auf es ein Abonnement Objekt erhalten, können Sie rufen abmelden()

const subscription = this.store.select('somedata').subscribe((state: any) => { 
    this.somedata = state.data; 
}); 
// later 
subscription.unsubscribe(); 

oder

ngOnInit(){ 
this.someDataSubscription = this.store.select('somedata').subscribe((state: any) => { 
    this.somedata = state.data; 
}); 
} 

ngOnDestroy(){ 
    this.someDataSubscription.unsubscribe(); 
} 
3

Sie brauchen nicht in erster Linie Verwendung abonnieren | async in deine Vorlage Alles, was Sie aus dem Geschäft erhalten, ist beobachtbar, lassen Sie Ihr Abonnement eckig handhaben. Hier ist api

3

Sie können Wert erhalten, ohne direkt Methode subscribe aufrufen, erhalten Wert von Asynchron-Rohr wie

@Component({ 
    template: ` 
     <div>Current Count: {{ counter | async }}</div> 
    ` 
}) 
class MyAppComponent { 
    counter: Observable<number>; 

    constructor(private store: Store<AppState>){ 
     this.counter = store.select('counter'); 
    } 
} 

Hier haben wir async Rohr verwenden für Wert bekommen. Die asynchrone Pipe abonniert ein Observable oder Promise und gibt den zuletzt ausgegebenen Wert zurück. Wenn ein neuer Wert ausgegeben wird, markiert die asynchrone Pipe die Komponente, die auf Änderungen geprüft werden soll. Wenn die Komponente zerstört wird, wird die asynchrone Leitung automatisch abgemeldet, um mögliche Speicherlecks zu vermeiden.

Verwandte Themen