[英]Wait for resource to load in guard using ngrx and selectors
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
變為 true。
這是我的守衛:
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
東西,我猜。
謝謝!
return this.store.pipe(
select(fromDataUserInformations.isLoading),
skipWhile(flag => !flag),
skipWhile(flag => flag),
mapTo(true),
);
它等待直到fromDataUserInformations.isLoading
為真,然后等待fromDataUserInformations.isLoading
再次為假,然后用真釋放守衛(意味着允許導航)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.