2016-11-12 85 views
0
未找到狀態更改

我正在使用ngrx在Angular2應用程序中提供狀態管理。我有兩個組件:「MenuComponent」和「ResultsPanelComponent」,它們訂閱由同一片狀態提供的不同值。通過訂閱組件

我看到的問題是,「菜單」組件響應狀態更改,但「結果」組件不記錄狀態值。

我正在調度動作來填充更高級組件中的狀態。

// 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(); 
    } 
} 

當我運行我的應用程序,我看到:

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} 

登錄到控制檯。狀態發生變化時,我希望看到ResultsPanelComponent state的更多日誌語句。

ResultsPanelComponentMenuComponent位於不同的模塊中,但都包含在調度加載數據的操作的同一父模塊中。

[更新]

我做了一個額外的行動來遞增newReportHeaderCount價值,無論從MenuComponentResultsPanelComponent出動的時候,國家是正確的,但新的值不會推送給訂閱所有組件到results切片狀態。

我只看到分派動作的組件中的新狀態值。

如果我移動的動作高階組件的派遣,我只看到在MenuComponent

任何想法什麼我可以做錯誤的狀態變化?

回答

0

我在一個模塊中加載了我的EffectListener和provideStore,這個模塊被其他模塊共享。

我將這些移動到我的根AppModule,一切都按預期工作。