我在方法中使用combineLatest
(它结合了所有作为参数传递的 Observables 的值)canActivate
。
我的理解是,每当任何一个可观察对象触发时, canActivate 可观察对象都需要触发。但这并没有发生
在我的 AuthorizationGuard 中,我有以下 canActivate 方法 -
public canActivate(route: Route): Observable<boolean> {
return combineLatest(this.service1.checkRoles(route.routeConfig.data.roles),
this.service2.serviceLoadedSub).pipe(
map(([isAuthorized, permissions]) => {
console.log('permission in auth guard');
console.log(permissionSet);
// some auth checks
return isAuthorized;
}
service1 checkRoles-
public checkRoles(roles: string[]): Observable<boolean> {
return this.existingRoles.pipe(
map(roleMap => {
// perform some checks
return true;
})
);
}
服务 2 -
export class Service2 {
public serviceLoadedSub: BehaviorSubject<Set<string>> = new BehaviorSubject<Set<string>>(null);
constructor (private restService: RestService) {
this.resService.get('url-info').subscribe(data => {
serviceLoadedSub.next(new Set(data));
}
}
}
因此,当服务 2 加载完成时……行为主体再次被触发。
但由于某种原因,canActiavte 中的 observable 没有被解雇。
知道为什么吗?