我是Angular 2的新手 . 在Angular.io路由教程中,我看到ActivatedRouteSnapShot和RouterStateSnapshot总是在AuthGuard函数中声明(注入):canActivate,canActivateChild,resolve ....但是,通常只使用1 . 你可以看到:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;
return this.checkLogin(url);
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Crisis> {
let id = route.params['id'];
return this.cs.getCrisis(id).then(crisis => {
if (crisis) {
return crisis;
} else { // id not found
this.router.navigate(['/crisis-center']);
return null;
}
});
}
那么为什么总是需要注入两者?
1 回答
canActivate
方法具有这些参数,因为您实现了CanActivate接口,这是一个所谓的Guard .因此,无论你是否需要它,你都拥有它,它们将在Angular调用方法时提供 .
对于
resolve
方法,情况相同,您实现Resolve接口,您必须在其中实现resolve方法:接口是 Contract ,因此是不可协商的 .