Ich habe einen Betreff Service wie folgt;Angular 2 abonnieren nach Tab ändern und erneut besuchen
private subject = new Subject<any>();
sendMessage(message: any) {
this.subject.next(message);
}
clearMessage() {
this.subject.next();
}
getMessage(): Observable<any> {
return this.subject.asObservable();
}
und Fütterung der Nachricht von Stammkomponente
HINWEIS: Meine Eltern-Kind-Komponenten verbunden über router-outlet
private getMerchantDetail() {
let data = {
Id: this.merchantId,
}
this.merchantsService.getMerchants(data)
.then((res) => {
// console.log(res)
if (res.Success) {
this.merchant = res.Data[0];
this.merchantListDetailService.sendMessage(res.Data[0]); -> here
}
})
.catch((err) => { })
}
Und dann die Daten von allen untergeordneten Komponenten zeichnen;
ngOnInit() {
this.merchantSubscribe = this.merchantListDetailService.getMessage()
.subscribe(merchant => {
console.log(merchant)
this.merchant = merchant;
this.getMerchantPaymentChannels();
})
}
ngOnDestroy() {
this.merchantSubscribe.unsubscribe();
}
PROBLEM: Alles ist gut, wenn man von Kind Komponenten zunächst auf neu geladene Seite geöffnet. Wenn ich jedoch die Registerkarte meiner untergeordneten Komponenten änderte und die ursprünglich geöffnete untergeordnete Komponente erneut besuchte, wurden die abonnierten Daten nicht abgerufen. Aber ngOnInit
Funktion funktioniert wieder. Auch getMessage() in service
funktioniert auch. Nur der Rückruf der untergeordneten Komponente subscribe ruft die Daten nicht erneut ab.