【问题标题】:error in canActivate guard methodcanActivate 保护方法中的错误
【发布时间】:2017-01-28 14:48:12
【问题描述】:

下面是我在 TypeScript 中实现 CanActivate 保护子句,当我编译这段代码时,它显示如下错误

声明类型既不是“void”也不是“any”的函数必须返回一个值

   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {

     this.appService.isValidUser().subscribe({
        next: (data) => data.authenticated, // this return true or false
        error: (err) => false
    });
}

这个错误的原因是什么?

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    canActivate 应该返回 Observable 而不是 Subscription。如果你调用.subscribe(),你会得到一个Subscription,因此我们使用.map()

    要处理错误情况,请使用.catch()

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> {
    
      return this.appService.isValidUser()
      .map(data => data.authenticated)
      .catch(_ => Observable.of([false]));
    }
    

    不要忘记导入所有运算符

    import 'rxjs/add/observable/of';
    import 'rxjs/add/operator/catch';
    import 'rxjs/add/operator/map';
    

    【讨论】:

    • 返回类型不应该是 Observable 吗?
    • @Martin 你的意思是Observable&lt;boolean&gt;.of(...)?我自己不使用 TS(仅在 Plunker 中),并且我没有收到有关缺少泛型类型的错误。
    • @Günter Zöchbauer ,我认为他在讲述 canActivate 方法的返回类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2017-05-04
    • 2019-04-30
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多