延迟加载具有空路径的模块

时间:2016-10-17 15:10:47

标签: angular typescript

我有以下设置:

app-module (root module)
    +frontend-module
    +backend-module
    auth-module

前端模块应负责以下路径:

/
/overview
/settings
/help

所有路径的后端模块如下:

/backend/**

这些路径的auth模块:

/sign-in
/sign-up
/sign-out

如果用户未登录,则应始终将其重定向到/sign-in

就像你上面看到的那样,我希望前端和后端模块能够懒惰地加载。因此,每当用户进入网站时,它应该非常快速地加载,因为auth模块非常轻量级。如果他然后输入他的名字和密码,他应该被重定向到/overview,这是在前端模块中(它应该懒得加载)。

我的问题是,我无法使前端模块的延迟加载工作。我尝试了以下方法:

@NgModule({
    imports: [
        RouterModule.forRoot([
            {
                path: 'backend',
                loadChildren: 'app/+backend/backend.module#BackendModule',
                canLoad: [AdminAuthGuardService]
            },
            {
                path: '',
                loadChildren: 'app/+frontend/frontend.module#FrontendModule',
                canLoad: [AuthGuardService]
            }
        ])
    ],
    exports: [RouterModule]
})

export class AppRoutingModule {

}

急切加载auth模块的路由配置,并定义上述路径(没有任何保护)。但由于前端模块的保护被定义为空路径,因此它将假设/sign-in也是前端模块的一部分。后端模块按预期工作。

甚至有可能以某种方式实现这一目标吗?

另一个可能是问题的问题是根模块甚至不知道哪些路径有效,所以对于当前的设置,无论如何都必须加载frondend模块,以便它可以验证路径,或者我是错?

作为解释:我的想法是如果用户没有被刷新,则快速​​响应,以便立即加载auth模块。在角度完成它的工作后,我会发出前端模块的负载。因此,当用户忙于登录时,实际应用程序将在后台加载

欢迎任何想法/建议/最佳做法。但我真的不想破解。如果angular不提供此功能,我将提交功能请求,以便进一步讨论此用例,但我不想以任何价格实现此功能

0 个答案:

没有答案