canActivate防护方法

时间:2017-01-28 14:48:12

标签: angular typescript rxjs

下面是我在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
    });
}

出现此错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

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';