angular - 如何在 ngrx/Store 减速器中使用其他 Angular11 服务作为初始状态?
问题描述
新的减速器和效果。基本上,我有这个减速器:
const realColumnsReducer = createReducer<ColumnsState>(
toData(AssetsColumns.columnsConfig),//here the service i need to use as a initial state
on(setColumns, (state, action) => toData(action.columns)),
on(setSelectedColumns, (state, action) =>
toData(
action.columns.map(x => ({
...x,
enabled: true
}))
)
)
这是我需要使用的 ijectble 服务的一部分
columnsConfig: StatefulColumn[] = [
{
column: assetCategoryColumn,
enabled: true
},
{
column: assetCodeColumn,
enabled: true
}
].map((x, index) => ({ ...x, index, width: columnMinWidthPx } as StatefulColumn));
这里有我的效果
@Effect()
applyCompanyPreferences = this.actions$.pipe(
ofType(applyCompanyPreferences.request),
switchMap(() => this.store.select(currentIdentity).pipe(onlyTruthy(), take(1))),
switchMap(identity => from(loadCompanyPreferencesFromIndexedDb(identity))),
map(x =>
x
? x.columns.map(z => ({ ...this.assetsColumns.columnsConfig[z.index], ...z } as StatefulColumn))
: this.assetsColumns.columnsConfig
),
mergeMap(x => [setColumns({ columns: x }), applyCompanyPreferences.success({ request: undefined })]),
如何将我的服务用作初始状态?
解决方案
据我了解,您希望在第一时间使用该服务来更新状态。也许这就是你要找的东西:https ://ngrx.io/guide/effects/lifecycle#oniniteffects 。
除此之外,switchMap 和 store.select 的组合也不正确。此页面中的最后一个示例https://ngrx.io/guide/effects可以让您了解如何正确地做事。