Angular 9 - Guard: canActivate 等待特定条件满足
Angular 9 - Guard: canActivate wait until specific condition is met
我有以下代码
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
this.userStore$ = this.store.pipe(select('userStore'));
return this.userStore$.pipe(
map( res => {
if(res) return true
}))
}
第一次 res 是未定义的,所以 canActivate 解析自己 returning false。我需要的是保持它的监听,直到 res 被赋值,然后 return true 继续前进。
我该怎么做?谢谢
看得出你对RXJS相当熟悉。 RXJS 提供了过滤器功能,可以根据特定条件允许或拒绝流的流动。
如果您将过滤器管道添加到流中,它将根据条件拒绝所有流。您始终必须指定真正的条件才能让流程继续进行。
文档https://www.learnrxjs.io/learn-rxjs/operators/filtering/filter
// you need to import the filter from rxjs operators
import {filter, map } 'rxjs/operators';
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
this.userStore$ = this.store.pipe(select('userStore'));
return this.userStore$.pipe(
filter(res => res != undefined),
map( res => {
if(res) return true
}))
}
我有以下代码
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
this.userStore$ = this.store.pipe(select('userStore'));
return this.userStore$.pipe(
map( res => {
if(res) return true
}))
}
第一次 res 是未定义的,所以 canActivate 解析自己 returning false。我需要的是保持它的监听,直到 res 被赋值,然后 return true 继续前进。 我该怎么做?谢谢
看得出你对RXJS相当熟悉。 RXJS 提供了过滤器功能,可以根据特定条件允许或拒绝流的流动。
如果您将过滤器管道添加到流中,它将根据条件拒绝所有流。您始终必须指定真正的条件才能让流程继续进行。
文档https://www.learnrxjs.io/learn-rxjs/operators/filtering/filter
// you need to import the filter from rxjs operators
import {filter, map } 'rxjs/operators';
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
this.userStore$ = this.store.pipe(select('userStore'));
return this.userStore$.pipe(
filter(res => res != undefined),
map( res => {
if(res) return true
}))
}