是否可以预加载使用canLoad的模块?

时间:2019-01-02 19:56:31

标签: javascript angular typescript

This question包含以下示例:

{
    path: 'admin',
    loadChildren: 
'app/admin/admin.module#AdminModule',
    canLoad: [AuthGuard]
}

仍然可以使用canLoad保护器来预加载/预取AdminModule吗?

是否不是将AuthGuard canActivate属性放在AdminModule内所有路由上的唯一其他选择?

2 个答案:

答案 0 :(得分:2)

这没有什么意义,因为在启动应用程序时会急切地进行预加载。因此,您的AuthGuard将如何知道用户是谁或他们有权访问什么。它将在任何服务都没有机会恢复以前的会话或与任何事物进行通信之前发生。

canLoadcanActivate是异步操作,如果必须先等待 才能进行预加载,则预加载无效。

问自己这个问题。我是否需要该应用程序快速更改到 admin 部分的路由。如果回答“是”,则使用canActivate并预加载,但是如果延迟很好,并且您想节省带宽,那么请使用canLoad而不进行预加载。

话虽如此,根据文档不支持

  

PreloadAllModules策略不会加载由CanLoad保护器保护的要素区域。这是设计使然。

https://angular.io/guide/router#canload-blocks-preload

答案 1 :(得分:1)

使用Angular 7及更高版本。通过自定义PreloadStrategy

可以预装警卫