Я использую асин c канал в angular для мониторинга наблюдаемого, поступающего из магазина rx js. 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}`);
});
После того, как пользователь войдет в систему, я получу предупреждение о том, что «новая роль пользователя - admin», однако канал в html шаблон не обновляется.
Когда я заменил store select () на фиктивное значение с использованием of (), и все заработало, как и ожидалось, так что я почти уверен, что проблема связана с rx js.
Редуктор аутентификации (который запускается) выглядит следующим образом (
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;
}
}
Я пытался убедиться, что действие UserProfileRetrieved отправлено изнутри ngZone.run () но это не имело значения. Я действительно не знаю, как еще go об отладке этого. Любые указатели будут с благодарностью. Спасибо!