【发布时间】:2017-02-23 17:55:38
【问题描述】:
我需要根据路由中传递的 URL 参数为我的 angular2 应用实现路由保护,例如:
http://myapp.com/test1/sites -------> where my routes use the test1 as a parameter :sitename
所以如果传递的参数== test1 那么canActivate返回true,否则返回false。
那么如何实现呢?
【问题讨论】:
我需要根据路由中传递的 URL 参数为我的 angular2 应用实现路由保护,例如:
http://myapp.com/test1/sites -------> where my routes use the test1 as a parameter :sitename
所以如果传递的参数== test1 那么canActivate返回true,否则返回false。
那么如何实现呢?
【问题讨论】:
路线声明:
{
path: ':sitename/sites',
component: SomeComponent,
canActivate: [CanActivateSite]
}
然后是守卫实现:
@Injectable()
class CanActivateSite implements CanActivate {
canActivate(route: ActivatedRouteSnapshot): boolean {
return route.params.sitename == 'test1';
}
}
【讨论】:
路由保护类可以实现 CanActivate 接口,它强制你定义一个 canActivate 函数。该函数有 2 个参数:ActivatedRouteSnapshot 和 RouterStateSnapshot。看看 ActivatedRouteSnapshot...它包含有关路由的数据,包括一个参数对象。
https://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html
【讨论】: