2016-11-28 5 views
1

Ich habe eine Reihe von Observablen.Abonnieren nach Abmelden()

Auf meiner ngOnInit() Methode initialisiere ich meine Abonnements.

this.lineOrdersSub[line.$key] = this.af.database.list(this.businessService.path + 'line_orders/' + line.$key) 
     .subscribe((lineOrders) => { 
      this.line_orders[line.$key] = lineOrders; 
}); 

Ich habe auch ein Kontrollkästchen für jedes Abonnement. Wenn das Kontrollkästchen aktiviert ist (Standard), ist das Abonnement aktiv (Abonnement für neue Daten).

Wenn ich ein Kontrollkästchen deaktivieren, ich dies tun:

unCheckmethod() { 
     this.lineOrdersSub[line.$key].unsubscribe(); //Unsubscribe to my subscription 
    this.line_orders[line.$key] = null; // Remove the data I get after the subscription (See first code snippet) 
    } 

Meine uncheck Methode funktioniert gut, aber nach dem ich versuche, das Abonnement zu beginnen wieder mit:

checkMethod() { 
this.lineOrdersSub[line.$key].subscribe(); 
} 

erhalte ich:

this.lineOrdersSub[line.$key].subscribe is not a function 

Meine Frage:

  1. Wie kann ich ein Abonnement abonnieren, nachdem ich unsubscribe? Falls unmöglich, können Sie sich einen anderen Weg vorstellen, dies zu tun?

Antwort

1

Der Fehler ist korrekt. Sie anrufen:

this.lineOrdersSub[line.$key] = this.af.d ... .subscribe(...); 

das heißt, Sie sind ein Subscription Objekt this.lineOrdersSub[line.$key] zuweisen. Kein Beobachtbarer.

Dann funktioniert .unsubscribe() offenbar funktioniert, wie es sollte. Wenn Sie versuchen, subscribe() aufzurufen, schlägt es fehl, da das Subscribtion-Objekt keine subscribe() Methode hat.

Sie müssen das Observable abonnieren.

+0

Danke Martin, korrigieren Sie mich, wenn ich falsch liege - ich muss erklären 1. Abonnement, 2. Observable des gleichen Elements mit 2 verschiedenen Variablen? Muss ich wieder alles in meinem on-init-Abonnement schreiben? – TheUnreal

+0

@TheUnreal Wenn Sie sowohl abonnieren als auch abmelden möchten, benötigen Sie immer zwei Variablen. Eines, das das Observable enthält (das heißt, Sie werden 'subscribe (...)' nennen) und ein anderes, das das Subscription-Objekt enthält, das von 'subscribe (...)' zurückgerufen wurde. Dort wirst du 'unsubscribe()' nennen. – martin

Verwandte Themen