1

idが以下のガードで利用できないのはなぜですか?警備員にルートパラメータがありません

@Injectable() 
export class ProjectDetailsGuard implements CanActivate { 

    constructor(private activatedRoute: ActivatedRoute) { } 

    canActivate() { 
     const id = this.activatedRoute.snapshot.params['id']; 

     console.log(id); // <-- undefined 
    } 

} 

コンポーネント内に実装するときに同じコードが完璧に動作。

+1

https://angular.io/api/router/CanActivate、canActivateにルートデータが渡されていることを確認してください。 – jlareau

答えて

2

ActivatedRouteは、ルートがアクティブ化された後にのみパラメータを提供できます。それはcanActivate方法ですなわち活性化される前に、必要がparamsを取得する場合、コンポーネントは、レンダリングする前に初期化ActivatedRouteSnapshot

canActivate(activatedRoute: ActivatedRouteSnapshot) { 
    const id = activatedRoute.params['id']; 

    console.log(id); 
} 
0

ガードをしてみてください。ガードロジックが真の値を返した場合、ルート変更とコンポーネントがレンダリングされます。したがって、保護されたルート値にアクセスすることはできません。

関連する問題