守卫中的角度路线元数据

时间:2017-05-04 13:27:26

标签: angular routes angular2-routing guard

回到angularjs(使用ui-router)。您可以向路由添加元数据,并在路由更改中使用这些元数据。

在角度方面有防守,但我似乎无法弄清楚如何从路线定义中获取元数据。

为了给你一个更具体的例子,我希望能够为一条路线添加元数据,让我们说一下所需的角色和/或权限,并让一名警卫完成繁重的工作。

路线定义:

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
}

1 个答案:

答案 0 :(得分:2)

route.data[ 'permissions' ][ 0 ]应该是view canActivate方法中的字符串MyGuardMyGuard应该实施CanActivate。您的路由应如下所示:

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

当访问路由的根目录时,此路由应该有效。 A detailed explanation可以在官方角度网站上找到。