来自商店的 ngrx select 值 - 如果值为空,则填充该值

ngrx select value from store - if value is null populate the value

Angular 5, NGRX 5

首次加载我的应用程序时,我的商店中有一个空列表。这是我的应用程序中多个组件使用的列表。

我想做的是 select 商店的清单:

this.terminals$ = this.store$.select(...);

如果列表为空,我想使用 action/effect:

填充列表
this.store$.dispatch(new TerminalActions.GetTerminals());

是否可以在 select 中执行此操作?

即调用 select,如果列表为空,调用一个效果来填充列表?

我想在 select 中执行此操作,以便我使用此列表的每个组件都可以调用 select,而不必 运行 执行操作填充列表。

你可能不喜欢这个答案,但 selector 是而且应该保持纯粹(输入,输出,无副作用)。因此,选择器不应分派操作。

如果你不想重复这个逻辑或者派发这些动作,你可以看看router guards。有关详细信息,请参阅 Todd Motto 的 https://toddmotto.com/preloading-ngrx-store-route-guards。根据您的实施,这可能 "freeze" 导航,直到数据在商店中可用。