2017-06-09 10 views
1

ObservableまたはPromise(この場合は約束)のいずれかを返すcanActivateを追加すると、ルーティングは正しく動作しますが、(クリック)イベントなどをブロックするように見えます。パイプは機能しません正しく、等...これらの関数はすべて、canActivateを作るとすぐにtrueを返します。助言がありますか?例えばcanActivate PromiseブロックまたはObservableブロックの検出変更検出

canActivate

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean | Promise<boolean> { 
return Stamplay.User.currentUser() 
    .then((res) => { 
    if (res.user) { 
     return true; 
    } else { 
     this.router.navigate(['/login']); 
     return false; 
    } 
    }).catch(() => { 
     this.router.navigate(['/login']); 
     return false; 
    }); 

For example, the material search doesn't work with canActivate/

、材料の探索がcanActivateで動作しますが、私はちょうどtrueを返すかcanActivateを取り出したときに完璧に動作しません。

+1

解決済みの約束を返すことができます。 trueまたはfalseを返す代わりに、 'Promise.resolve(true)'と 'Promise.reject(false)'を返す – trichetriche

+0

@trichetricheありがとうございました!私はそれが他の人に役立つと思うので、あなたが答えを出すならば、それを正しいものにすることができます。 –

+0

問題はありませんでした、ありがとう、ありがとう – trichetriche

答えて

1

私のコメントに続いて、trueとfalseを返す代わりにPromise.resolve(true)Promise.reject(false)を返します。

関連する問題