我使用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
的另一个日志语句。
ResultsPanelComponent
与MenuComponent
位于不同的模块中,但两者都包含在调度操作以加载数据的同一父模块中。
[更新]
我做了一个额外的操作来增加newReportHeaderCount
值,当从MenuComponent
或ResultsPanelComponent
调度时,状态是正确的,但新值不会推送到所有组件订阅results
状态切片。
我只在调度操作的组件中看到新的状态值。
如果我将操作的调度移动到更高阶的组件,我只会在MenuComponent
关于我可能做错的任何想法?
答案 0 :(得分:0)
我在一个模块中加载了我的EffectListener和provideStore,这个模块在其他几个模块中共享。
我把它们移到我的根 success:function(data){
alert(data.email);
}
,一切都按预期工作。