0

我在方法中使用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 没有被解雇。

知道为什么吗?

4

0 回答 0