Ich habe eine verschachtelte Komponente, die ein anklickbares Diagramm mit drei auswählbaren Abschnitten enthält, die den selectedIndex der md-tab-Gruppe, in der es sich befindet, festlegen. Ich klicke auf das erste, I Gehe zum ersten Tab, der zweite führt zum zweiten und drittens zum dritten Tab, ziemlich einfach.Angular 2 - Service mit BehaviorSubject Erstellen einer Schleife
Das Problem ist, dass der Dienst, den ich benutze, eine Art Schleife zu erstellen scheint. Wenn ich die Schritte trete, die der Service macht, sehe ich, dass er jedes Mal größer wird.
Relevante Servicecode:
changeActiveTab(number) {
console.log("Before: ");
this._activeTab.subscribe(val => console.log(val));
this._activeTab.next(number);
console.log("After");
this._activeTab.subscribe(val => console.log(val));
}
Was ich sehe, wenn ich auf dem ersten Abschnitt klicken, navigieren Sie zurück auf die Tabelle mit dem Haupt nav, und wiederholen Sie den Vorgang noch zwei Mal:
Before:
0
1
After
1
Before:
1
2
2
2
After:
2
Before:
2
3
3
3
3
3
3
After
3
Ich bin ziemlich neu in BehaviorSubject, irgendwelche Ideen, wo ich falsch liege?
(Mein Beispiel, das ich verwendet wurde von here wenn das jeder hilft) Komponente
Relevante Code für Eltern:
selectedTab: number;
subscription:Subscription;
constructor(private _activeTabService: ActiveTabService) { }
ngOnInit() {
this.subscription = this._activeTabService.activeTab$.subscribe(
selectedTab => this.selectedTab = selectedTab);
}
ngOnDestroy(){
this.subscription.unsubscribe();
}
Relevante Diagramm TS für das Kind Komponente:
onClick(event){
if(event.series == 'Table'){
this.changeActiveTab(1);
}
if(event.series == 'Chairs'){
this.changeActiveTab(2);
}
if(event.series == 'Desks'){
this.changeActiveTab(3);
}
}
Vielen Dank für die Bestätigung! Kannst du erklären, wie das aussehen würde? Wenn ich die Registerkarte einstelle und zurückgebe, ist das nicht mehr oder weniger dasselbe wie das, was ich jetzt habe? – gv0000
Ich habe ein einfaches Beispiel hinzugefügt – Avi
Spielt es eine Rolle, dass ich BehaviorSubject in meinem Beispiel verwendet habe und Sie Subject hier verwenden? würde meine onClick Funktion in etwa so aussehen Also:. 'onClick (event) { this.tabService.registerTab() abonnieren ( (res) => { if (event.series == 'Table') { this.changeActiveTab (1); } if (event.series == 'Stühle') { this.changeActiveTab (2); } if (event.series == Schreibtischen ') { this.changeActiveTab (3); } } } ' – gv0000