TLDR: у меня есть селектор isLoading
, я хочу использовать его в своей охране, чтобы активировать маршрут, только когда этот селектор имеет значение false.
Вот редуктор:
export const initialState: State = {
loaded: false,
loading: false,
success: {
[...]
}
};
export const reducer = createReducer(
initialState,
on(
fromApiActions.loadRequest,
(state): State => ({
...state,
loading: true
})
),
on(
fromApiActions.loadRequestSuccess
(state, partialState): State => ({
...state,
loaded: true,
loading: false,
success: {
...state.success,
...partialState
}
})
),
on(
fromApiActions.loadRequestFail,
(state): State => ({
...state,
loaded: false,
loading: false
})
)
);
И у меня есть селектор, который выбирает loading
из состояния. При загрузке приложения я отправляю действие LoadRequest
, которое превращает loading
в истинное значение.
Вот мой защитник:
export class CanActivateChildrenGuard implements CanActivateChild {
constructor(private store: Store<fromDataUserInformations.State>) {}
canActivateChild(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
return this.store.pipe(
select(fromDataUserInformations.isLoading),
// what to use here?
);
}
}
Мне не удается заставить стражника ждать для выполнения LoadRequestSuccess
(что в эффекте LoadRequest
), чтобы повернуть loading
в false
, чтобы я мог вернуть что-то вроде !loading
Я думаю.
Спасибо!