Ich verwende ngrx, um die Statusverwaltung in einer Angular2-App bereitzustellen. Ich habe zwei Komponenten: "MenuComponent" und "ResultsPanelComponent", die verschiedene Werte abonnieren, die von derselben Statusscheibe bereitgestellt werden.Die Statusänderung wurde von der Subskription in der Komponente
Das Problem, das ich sehe, ist, dass die "Menü" -Komponente reagiert auf die Statusänderung, aber die "Ergebnisse" -Komponente nicht, wenn ich den Wert des Zustands protokollieren.
Ich verschicke die Aktion, um den Status in einer Komponente höherer Ordnung aufzufüllen.
// menu.component.ts
export class MenuComponent implements OnInit, OnDestroy {
private sub: Subscription;
newReportHeaderCount: number;
constructor(
private store: Store<AppState>,
) { }
ngOnInit(): void {
this.sub = this.store.select('results').subscribe((state) => {
console.log('MenuComponent state: ', state);
this.newReportHeaderCount = state['newReportHeaderCount'];
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
}
// results.component.ts
export class ResultsPanelComponent implements OnInit, OnDestroy {
private sub: Subscription;
reportHeaderSummary: ReportHeaderSummary[] = [];
constructor(
private store: Store<AppState>,
) {}
ngOnInit(): void {
this.sub = this.store.select('results').subscribe((state) => {
console.log('ResultsPanelComponent state: ', state);
this.reportHeaderSummary = state['reportHeaderSummary'];
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
}
Wenn ich meine app laufen, ich sehe:
MenuComponent state: Object {reportHeaderSummary: Array[0], reportHeaders: Array[0], newReportHeaderCount: 0, loading: false}
ResultsPanelComponent state: Object {reportHeaderSummary: Array[0], reportHeaders: Array[0], newReportHeaderCount: 0, loading: false}
MenuComponent state: Object {reportHeaderSummary: Array[4], reportHeaders: Array[0], newReportHeaderCount: 3, loading: false}
an der Konsole angemeldet. Ich würde erwarten, eine weitere Log-Anweisung für ResultsPanelComponent state
zu sehen, wenn der Zustand geändert wurde.
Die ist in einem anderen Modul als MenuComponent
, aber beide sind in demselben übergeordneten Modul enthalten, das die Aktion zum Laden von Daten auslöst.
[Update]
Ich habe eine weitere Aktion des newReportHeaderCount
Wert zu erhöhen, und wenn entweder von MenuComponent
versandt oder ResultsPanelComponent
, ist der Zustand korrekt, aber die neuen Werte werden nicht auf alle Komponenten geschoben, die abonnieren zu der results
Scheibe des Staates.
Ich sehe nur den neuen Zustandswert in der Komponente, die die Aktion ausgelöst hat.
Wenn ich den Versand der Aktion an die übergeordnete Komponente bewegen, sehe ich nur die Zustandsänderung in MenuComponent
Alle Ideen, was ich falsch machen könnte?