我正在使用角度的异步管道来监视来自 rxjs 商店的可观察对象。组件的 ngOnInit 看起来像这样
ngOnInit() {
this.userRole$ = this.store.select(selectUserProfile).pipe(
filter(user => !!user),
map(user => parseUserRole(user.role))
);
}
组件模板如下所示
<p> User role is {{ userRole$ | async }} </p>
用户登录后,页面消息为空字符串
在 component.ts 我添加了以下代码来调试问题
this.userRole$.subscribe(userRole => {
alert(`new user role is ${userRole}`);
});
用户登录后,我收到一条警告说“新用户角色是管理员”,但是,html 模板中的管道没有更新。
当我使用 of() 将商店 select() 替换为虚拟值时,一切都按预期工作,所以我很确定问题与 rxjs 有关。
auth reducer(正在触发)看起来像这样(
export function reducer(state = initialAuthState, action: AuthActions): AuthState {
switch (action.type) {
/// ...CODE OMITTED
case AuthActionTypes.UserProfileRetrieved:
alert(`setting user profile ${action.payload.userProfile}`)
return { ...state, userProfile: action.payload.userProfile }
default:
return state;
}
}
我已经尝试确保从 ngZone.run() 内部调度 UserProfileRetrieved 操作,但这并没有什么不同。我真的不知道如何进行调试。任何指针将不胜感激。谢谢!