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 ]应该是MyGuardcanActivate方法中的字符串viewMyGuard 应该实施 CanActivate。您的路由应如下所示:

{
    path: '',
    component: MyComponent,
    data: {
        permissions: ["view"],
        roles: ["admin", "user"]
    },
    canActivate: [ MyGuard ]
}

而且这个路由应该在访问路由的根目录时起作用。 A detailed explanation 可以在官方 angular 网站上找到。