Why isn't id
available in the below guard?
@Injectable()
export class ProjectDetailsGuard implements CanActivate {
constructor(private activatedRoute: ActivatedRoute) { }
canActivate() {
const id = this.activatedRoute.snapshot.params['id'];
console.log(id); // <-- undefined
}
}
The same code works perfectly when implemented inside ponents.
Why isn't id
available in the below guard?
@Injectable()
export class ProjectDetailsGuard implements CanActivate {
constructor(private activatedRoute: ActivatedRoute) { }
canActivate() {
const id = this.activatedRoute.snapshot.params['id'];
console.log(id); // <-- undefined
}
}
The same code works perfectly when implemented inside ponents.
Share Improve this question asked Aug 25, 2017 at 15:01 Alex LomiaAlex Lomia 7,23513 gold badges58 silver badges94 bronze badges 1- 1 Please look at angular.io/api/router/CanActivate, canActivate is passed the route data. – jlareau Commented Aug 25, 2017 at 15:06
1 Answer
Reset to default 12The ActivatedRoute
can provide params only after the route is activated. If need to get params
before it is activated i.e in canActivate
method, try with ActivatedRouteSnapshot
canActivate(activatedRoute: ActivatedRouteSnapshot) {
const id = activatedRoute.params['id'];
console.log(id);
}