守卫中不提供路线参数

Ale*_*mia 2 javascript angular-routing angular angular-router-guards angular-router

为什么id在后卫中不可用?

@Injectable()
export class ProjectDetailsGuard implements CanActivate {

    constructor(private activatedRoute: ActivatedRoute) { }

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

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

}
Run Code Online (Sandbox Code Playgroud)

在组件内部实现时,相同的代码可以完美地工作。

Raj*_*jez 5

ActivatedRoute能够提供PARAMS路线被激活之后。如果需要params在激活之前获取,例如在canActivate方法中,请尝试ActivatedRouteSnapshot

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

    console.log(id); 
}
Run Code Online (Sandbox Code Playgroud)