2016-11-07 1 views
0

Ich habe festgestellt, dass mein Angular2-Abonnement nur beim Laden der Seite ausgelöst wird. Wenn ich eine weg von und dann zu meinem home.component die checkUser() Funktion startet nicht startet.Angular2 mit Abonnements mit Routenwechsel

Zum Beispiel habe ich einen RouterLink auf eine separate Seite eingerichtet (ungefähr). Wenn ich in meiner About-Seite einen RouterLink auf meine Homepage zurückstelle, funktioniert meine checkUser()-Funktion von home.component nicht.

Was ist der beste Weg, um meine Abonnements mit diesen Routenänderungen arbeiten zu lassen?

Mein home.component

export class HomeComponent implements OnInit { 
private username$: FirebaseObjectObservable<string>; 
private dashlink: boolean; 
private logsub: Subscription; 
    constructor(private mainService: MainService){ 
    } 

    checkUser(){ 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 

    ngOnInit(){ 
    this.checkUser(); 
    } 

} 
+1

Was Sie beschrieben haben klingt richtig. ngOnInit sollte jedes Mal aufgerufen werden, wenn die Route erreicht wird. Vielleicht im Zusammenhang mit https://github.com/angular/angular/issues/8012 – Fiddles

Antwort

1

Im Allgemeinen können Sie einen beliebigen Code für die Initialisierung in der constructor auf jeder class (Komponentenklasse) benötigt platzieren.

Für Ihren Fall möchten Sie überprüfen Benutzercode innerhalb der constructor, wird es jedes Mal aufgerufen HomeComponent Zielroute übereinstimmen.

export class HomeComponent implements OnInit { 
    private username$: FirebaseObjectObservable<string>; 
    private dashlink: boolean; 
    private logsub: Subscription; 

    constructor(private mainService: MainService){ 
     // moving checkUser code inside constructor 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 
}