2016-11-12 59 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,一切都按预期工作。