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

衛隊初始化組件渲染之前。如果警衛邏輯返回真值,則路由更改和組件呈現。所以你不能在後臺訪問激活的路由值。