我在组件中有 api 调用,这很耗时,所以我实现了解析器。我希望解析器数据存在于 store中,以供以后使用。我已经实现了ngrx/store、ngrx/effects和ngrx/router-store。
组件中的当前状态
期望的状态
为了保存解析器数据,我需要访问有效的解析器数据。所以我可以简单地在组件中调度动作并订阅状态。
- 组件中的调度操作(LoadSubTopicDetails)
- effects 将监听 action 并在 effects 中访问相同的解析器数据
问题
我总是{}
在 CustomSerializer 的“数据”中变空。
如何在效果中访问解析器数据?提前致谢。
代码
reducers / index.ts (CustomSerializer)
export interface RouterStateUrl {
url: string;
queryParams: Params;
params: Params;
data: any;
}
export const reducers: ActionReducerMap<State> = {
routerReducer: fromRouter.routerReducer
};
@Injectable()
export class CustomSerializer implements fromRouter.RouterStateSerializer<RouterStateUrl> {
serialize(routerState: RouterStateSnapshot): RouterStateUrl {
let route = routerState.root;
while (route.firstChild) {
route = route.firstChild;
}
const { url, root: { queryParams } } = routerState;
const { params, data } = route;
console.log('routerData in CustomSerializer', { url, queryParams, params, data });
return { url, queryParams, params, data };
}
}
减速器 / router.selector.ts
export const getRouterState = createFeatureSelector< RouterReducerState<RouterStateUrl> >('routerReducer');
组件.ts
// current state of component
this.subTopicDetails = this.route.snapshot.data['content'];
// new way (desired state), getting "resolver data" from store
this.store.dispatch(new fromCourse.LoadSubTopicDetails);
this.store.select(getSubTopicDetails)
.subscribe(data => this.subTopicDetails = data);