2016-11-12 6 views
0
nicht erkannt.

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?

Antwort

0

Ich habe meine EffectListener und ProvideStore in einem Modul geladen, das über mehrere andere Module verteilt wurde.

Ich habe diese auf meine Wurzel AppModule verschoben und alles funktioniert wie erwartet.

Verwandte Themen