【发布时间】:2021-04-23 18:25:51
【问题描述】:
reducer 和效果的新功能。基本上,我有这个减速器:
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 })]),
如何将我的服务用作初始状态?
【问题讨论】:
-
在不了解你的代码和业务逻辑的情况下,建议你看一下ngrx的官方文档
https://ngrx.io/guide/store。正如您在ngrx/redux 流程的第一张图片中看到的那样,您应该只从effects调用您的服务,而永远不要从您的reducers调用您的服务。因此,在您的情况下,我建议您执行两个操作:fetchData和fetchDataSuccess,以便您可以在您的效果中调用您的服务fetchDataSuccess操作,然后更改减速器中的状态。我觉得这有帮助。
标签: angular redux dependency-injection ngrx