Angular Guards 中的路由元数据
Angular Route Metadata in Guards
返回 angularjs(使用 ui-router)。您可以将元数据添加到路由中并在路由更改中使用它们。
在 angular 中有这方面的守卫,但我似乎无法弄清楚如何从路由定义中获取元数据。
为了给你一个更具体的例子,我希望能够将元数据添加到路由中,假设需要ui红色角色和/或权限,并让一名警卫完成繁重的工作。
路由定义:
RouterModule.forChild([
{
path: '',
component: MyComponent,
data: {
permissions: ["view"],
roles: ["admin", "user"]
}
},
...
]);
然后在我的守卫中:
constructor(private myService: MyService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
//How to get a hold of the data defined for the current route ?
console.log(route.data); //returns an empty object
}
route.data[ 'permissions' ][ 0 ]
应该是MyGuard
的canActivate
方法中的字符串view
。 MyGuard
应该实施 CanActivate
。您的路由应如下所示:
{
path: '',
component: MyComponent,
data: {
permissions: ["view"],
roles: ["admin", "user"]
},
canActivate: [ MyGuard ]
}
而且这个路由应该在访问路由的根目录时起作用。 A detailed explanation 可以在官方 angular 网站上找到。
返回 angularjs(使用 ui-router)。您可以将元数据添加到路由中并在路由更改中使用它们。
在 angular 中有这方面的守卫,但我似乎无法弄清楚如何从路由定义中获取元数据。
为了给你一个更具体的例子,我希望能够将元数据添加到路由中,假设需要ui红色角色和/或权限,并让一名警卫完成繁重的工作。
路由定义:
RouterModule.forChild([
{
path: '',
component: MyComponent,
data: {
permissions: ["view"],
roles: ["admin", "user"]
}
},
...
]);
然后在我的守卫中:
constructor(private myService: MyService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
//How to get a hold of the data defined for the current route ?
console.log(route.data); //returns an empty object
}
route.data[ 'permissions' ][ 0 ]
应该是MyGuard
的canActivate
方法中的字符串view
。 MyGuard
应该实施 CanActivate
。您的路由应如下所示:
{
path: '',
component: MyComponent,
data: {
permissions: ["view"],
roles: ["admin", "user"]
},
canActivate: [ MyGuard ]
}
而且这个路由应该在访问路由的根目录时起作用。 A detailed explanation 可以在官方 angular 网站上找到。