2017-01-28 44 views
2

下面是我實現的打字稿CanActivate後衛條款,當我編譯的代碼,它顯示如下錯誤錯誤canActivate防範手段

聲明類型是一個函數,既不是「無效」,也沒有「任何」必須返回一個值

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

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

,這是什麼錯誤的原因是什麼?

回答

2

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/operator/catch'; 
import 'rxjs/add/operator/map'; 
import "rxjs/add/observable/of"; 
+1

不應返回類型應該是可觀察? – Martin

+0

@Martin你的意思是'Observable .of(...)'?我不使用TS(僅在Plunker中),在那裏我沒有得到關於缺少泛型類型的錯誤。 –

+1

@GünterZöchbauer,我想他是講述canActivate方法的返回類型 – refactor