Angular 5,NGRX 5
第一次加载我的应用程序时,我的商店中有一个空列表。这是我的应用程序中多个组件使用的列表。
我想做的是从商店中选择列表:
this.terminals$ = this.store$.select(...);
如果列表为空,我想使用动作/效果填充列表:
this.store$.dispatch(new TerminalActions.GetTerminals());
是否可以在select中执行此操作?
即调用select,如果列表为空,则调用一个效果来填充列表?
我想在选择中执行此操作,这样我使用此列表的每个组件都可以调用选择,而不必执行操作即可填充列表。
答案 0 :(得分:2)
您可能不喜欢这个答案,但是selector
是并且应该保持纯净(输入,输出,无副作用)。因此,选择器不应调度动作。
如果您不想重复此逻辑或调度这些操作,则可以查看路由器防护。有关更多信息,请参见Todd Motto的https://toddmotto.com/preloading-ngrx-store-route-guards。根据您的实现,这可能会“冻结”导航,直到商店中有可用数据为止。