如何连接两个路由阵列并将canActivate:[..]动态添加到其中一个



在app.module文件中,我目前有一个Route Array,它看起来像这样:

const ROUTES = [
{ path: '', redirectTo: 'component1', pathMatch: 'full' },
{
path: 'component1',
component: Component1Component,
canActivate: [AuthGuardService]
},
{
path: 'component2'
component: Component2Component,
canActivate: [AuthGuardService]
},
{
path: 'signin-callback',
component: SigninRedirectCallbackComponent
},
{ path: '**', redirectTo: '', pathMatch: 'full' }
];

我想把这个数组分成两个数组PROTECTED_ROUTESUNPROTECTED_ROUTES。在用于PROTECTED_ROUTES阵列中的所有路由的函数getAllRoutes中,应添加参数canActivate: [AuthGuardService]。之后,两个数组被合并并返回。

不知怎么的:

const PROTECTED_ROUTES = [
{
path: 'component1',
component: Component1Component
},
{
path: 'component2'
component: Component2Component
}
];
const UNPROTECTED_ROUTES = [
{ path: '', redirectTo: 'component1', pathMatch: 'full' },
{
path: 'signin-callback',
component: SigninRedirectCallbackComponent
},
{ path: '**', redirectTo: '', pathMatch: 'full' }
];
function getAllRoutes() {
// let protectedRoutes = PROTECTED_ROUTES;
// protectedRoutes.forEach(r => 
//   r.
// somehow add canActivate: [AuthGuardService]
//   );
protectedRoutes = protectedRoutes + UNPROTECTED_ROUTES //pseudo code
return protectedRoutes;
}

之后是否可以将参数添加到对象数组条目中?如果两个对象数组具有不同的参数,它们可以合并吗?

创建一个受保护和不受保护的路径。使您的路径成为这两个类别的子路径,然后在/protected上应用canActiavte,使其适用于其所有子路径。和/不带canActivate的unprotected将具有不需要canActivate。

最后我可以这样解决:

const PROTECTED_ROUTES = [
{
path: 'component1',
component: Component1Component
},
{
path: 'component2'
component: Component2Component
}
];
const UNPROTECTED_ROUTES = [
{ path: '', redirectTo: 'component1', pathMatch: 'full' },
{
path: 'signin-callback',
component: SigninRedirectCallbackComponent
},
{ path: '**', redirectTo: '', pathMatch: 'full' }
];
function addGuard(routes: any[]): any[] {
routes.forEach(entry => (entry.canActivate = [AuthGuardService]));
return routes;
}

和在进口:

RouterModule.forRoot([...addGuard(PROTECTED_ROUTES), ...UNPROTECTED_ROUTES], {
// ...
})

最新更新