我正在使用 @ngrx\data 构建一个应用程序,并使用路由解析器将数据预加载到商店中。我通过点击加载的 $ observable 并调用 getAll() 来做到这一点,如下所示:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return this.dealService.loaded$.pipe(
tap(loaded => {
if (!loaded) {
this.dealService.getAll()
}
}),
filter(loaded => !!loaded),
first()
)
}
当我只为一个实体加载数据时,这非常有效。但是,一旦我引入第二个实体数据服务并为同一个组件加载数据(无论是在同一个解析器中还是在单独的解析器函数中),当最后一个 getAll() 可观察对象完成时,存储中的数据就会被覆盖,删除另一个实体。
所以我的状态看起来像:
[Deal] @ngrx/data/query-all:
entityCache: {
Deal: {
ids: [],
entities: {},
entityName: 'Deal',
filter: '',
loaded: false,
loading: true,
changeState: {}
}
}
[DealLine] @ngrx/data/query-all
entityCache: {
Deal: {
ids: [],
entities: {},
entityName: 'Deal',
filter: '',
loaded: false,
loading: true,
changeState: {}
},
DealLine: {
ids: [],
entities: {},
entityName: 'DealLine',
filter: '',
loaded: false,
loading: true,
changeState: {}
}
}
[DealLine] @ngrx/data/query-all/success
entityCache: {
Deal: {
ids: [],
entities: {},
entityName: 'Deal',
filter: '',
loaded: false,
loading: true,
changeState: {}
},
DealLine: {
ids: [...],
entities: {...},
}
}
[Deal] @ngrx/data/query-all/success
entityCache: {
Deal: {
ids: [...],
entities: {...},
}
}
所以我的“最终”状态只包含交易实体。为什么?我错过了什么。希望这足以继续,但如果需要,我很乐意发布更多我的代码。
先感谢您!