Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2+;:canLoad使用_Angular_Lazy Loading_Angular Routing_Angular Guards - Fatal编程技术网

Angular 角度2+;:canLoad使用

Angular 角度2+;:canLoad使用,angular,lazy-loading,angular-routing,angular-guards,Angular,Lazy Loading,Angular Routing,Angular Guards,我正在尝试对路由使用canLoad函数,但它似乎不起作用 我不知道为什么,也许你不能将它与canActivate或其他东西一起使用,但因为我不知道,我想这里会有人 代码运行时,当使用aot编译时,我得到以下结果: chunk {admin.module} admin.module.chunk.js, admin.module.chunk.js.map () 28 kB {main} {pilotage.module} {suiviprod.module} chunk {inline} inlin

我正在尝试对路由使用
canLoad
函数,但它似乎不起作用

我不知道为什么,也许你不能将它与
canActivate
或其他东西一起使用,但因为我不知道,我想这里会有人

代码运行时,当使用aot编译时,我得到以下结果:

chunk {admin.module} admin.module.chunk.js, admin.module.chunk.js.map () 28 kB {main} {pilotage.module} {suiviprod.module}
chunk {inline} inline.bundle.js, inline.bundle.js.map (inline) 5.83 kB [entry]
chunk {main} main.bundle.js, main.bundle.js.map (main) 3.5 MB {vendor} [initial]
chunk {pilotage.module} pilotage.module.chunk.js, pilotage.module.chunk.js.map () 17.2 kB {admin.module} {main} {suiviprod.module}
chunk {styles} styles.bundle.js, styles.bundle.js.map (styles) 267 kB {inline} [initial]
chunk {suiviprod.module} suiviprod.module.chunk.js, suiviprod.module.chunk.js.map () 20.4 kB {admin.module} {main} {pilotage.module}
chunk {vendor} vendor.bundle.js, vendor.bundle.js.map (vendor) 5.52 MB [initial]
但是当我转到模块时,控制台日志没有完成

以下是我的路线代码:

记录的.module(主路由,将其视为app.module)

导出常量日志:路由=[
{
路径:“已记录”,组件:LoggedComponent,canActivate:[AuthGuardService],canActivateChild:[AuthGuardService],子级:[
{path:'profile',component:ProfileComponent,children:[]},
…管理路线,
…主要路线,
…领航员,
…瑞士航线,
{path:'admin',loadChildren:'app/logged/admin/admin.module#AdminModule',canLoad:[AdminGuardService]},
{path:'pilotage',loadChildren:'app/logged/pilotage/pilotage.module#PilotageModule',canLoad:[AdminGuardService]},
{path:'suivprod',loadChildren:'app/logged/suivprod/suivprod.module#suivprodmodule',canLoad:[AdminGuardService]},
{路径:'',重定向到:'/logged/main/error',路径匹配:'前缀'}
]
},
];
管理模块(suiviprod和pilotage是相同的,只是路线和组件不同)

导出常量adminRoutes:路由=[
{
路径:“admin”,组件:AdminComponent,canActivate:[AdminGuardService],canActivateChild:[AdminGuardService],子级:[
{路径:'验证',组件:ValidationComponent,子项:[]},
{路径:“dashboard”,组件:DashboardComponent,子项:[]},
{path:'user/:id',component:UserComponent,children:[]},
{path:'users',component:UsersComponent,children:[]},
{path:'params',component:ParamsComponent,children:[]},
{路径:'journals',组件:JournalsComponent,子项:[]},
{路径:'清除',组件:清除组件,子项:[]},
{path:'groups',component:GroupsComponent,children:[]},
{path:'configs',component:ConfigurationComponent,子项:[]},
{路径:'applications',组件:ApplicationsComponent,子项:[]},
{路径:'',重定向到:'/logged/admin/dashboard',路径匹配:'前缀'}
]
},
];
authguard.service(如果本地存储有令牌,则canActivate返回true)

@Injectable()
导出类AdminGuardService实现CanActivate、CanActivateChild和CanLoad{
jwtHelper:jwtHelper=newjwthelper();
构造函数(专用路由器:路由器,专用警报器:警报服务){}
//tslint:禁用下一行:最大行长度
canActivate(路由?:ActivatedRouteSnapshot,状态?:RouterStateSnashot):布尔值{return canActivate(路由,状态,this[global.roles.admin]);}
canActivateChild(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot):布尔值{返回this.canActivate(路由,状态);}
canLoad(route:route):布尔{console.log('coucou');返回canActivate(null,null,this,[global.roles.admin]);}
}
编辑警卫使用的
canActivate
功能(适用于
canActivate
canActivateChild
):

导出函数canActivate(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot,调用方:any,用户角色:string[]):布尔值{ 试一试{ //拿到代币 让token=localStorage.getItem('jwt'); //如果未找到令牌,则表示未连接 如果(!令牌){ caller.alerter.error('Vous n'tes pas connecté'); caller.router.navigate(['/login']); 返回false; } //尝试获取角色。如果失败,则不是有效的令牌。 让decodedToken=caller.jwtHelper.decodeToken(令牌); 让角色:Array=decodedToken.roles.split(','); //如果找到任何角色,则返回true 让发现=错误; for(让用户角色的角色){ 如果(roles.indexOf(role)>=0){found=true;} } 如果(找到){返回true;} //未找到角色=>未授权 caller.alerter.error(`autorisionmanquante`); caller.router.navigate(['/logged/main']); 返回false; }捕获(ex){ //捕捉JWT错误 caller.alerter.error(`La session usilizateur est corrompue`); caller.router.navigate(['/login']); 返回false; } }
您的
卡激活可能有问题。以下是方法主体:

return canActivate(route, state, this, [global.roles.admin]);

它正在调用另一个名为
canActivate
的函数。那是什么?

您的
卡激活可能有问题。以下是方法主体:

return canActivate(route, state, this, [global.roles.admin]);

它正在调用另一个名为
canActivate
的函数。这是什么?

您不想在主
日志目录中定义延迟加载模块的子路由。您应该只定义模块的入口点,然后让模块处理其内部布线。通过在
loggedrootes
中定义模块的子路由,实际上已经声明它们是根目录的一部分 应用程序模块

canLoad
仅用于延迟加载的模块-这些模块必须控制自己的路由。根模块无法控制这一点,因为这样它就会知道延迟加载模块的组件,并且不会延迟加载

日志中删除此项:

...adminRoutes,
...pilotageRoutes,
...suiviProdRoutes,
path: 'admin', component: AdminComponent...
…mainRoutes
很好,因为它不是延迟加载模块的一部分

并确保惰性加载的模块已注册其路由:

@NgModule({
  imports: [ RouterModule.forChild(adminRoutes) ]
})
export class AdminModule { }
延迟加载的模块希望在内部处理它们自己的路由,因为您在顶级注册所有路由。您的应用程序不关心延迟加载的模块,它将看到您的管理路由并将您导航到那里,因为这只是一个普通路由。但是,AOT编译器将看到您的
加载子项
s,并且