' 不可分配给类型 'Observable',angular,typescript,rxjs6,rxjs-pipeable-operators,rxjs-observables"/>

首页 > 解决方案 > 角度路由保护/解析器 - 类型'Observable' 不可分配给类型 'Observable'

问题描述

我正在使用路由保护器(或解析器,我尝试使用其中任何一个但得到相同的错误),我想在其中获取 Observable 作为返回值:

canActivate(): Observable<boolean> {
    return this.store.pipe(
      select(fromUserProfileState.getUserProfiles),
      tap((loaded: UserProfile[]) => {
        if (!loaded || loaded.length == 0) {
          this.store.dispatch(new fromUserProfileActions.LoadUPs());
        } else {
          return of(true);
        }
      }),
      filter((loaded: UserProfile[]) => loaded.length > 0),
      first()
    );
  }

但是,这不会返回 Observable,它会返回 Observable,这是不可接受的。如何调整 rxjs (v 6.5.5) 运算符以仅返回 Observable?

在此处输入图像描述

标签: angulartypescriptrxjs6rxjs-pipeable-operatorsrxjs-observables

解决方案


试试这个:

canActivate(): Observable<boolean> {
  return this.store.pipe(
    select(fromUserProfileState.getUserProfiles),
    // Convert the information from UserProfiles to a boolean
    // Thils will also be used to authorize the navigation
    map((loaded: UserProfile[]) => !!(loaded && loaded.length)),
    // dispatch an action is no user profile has been loaded
    tap((isLoaded: Boolean) => {
      if (!isLoaded) {
        this.store.dispatch(new fromUserProfileActions.LoadUPs());
      }
    }),
    // complete the observable
    take(1)
  );
}

推荐阅读