【发布时间】:2019-08-25 03:20:40
【问题描述】:
我有一个在多个级别使用延迟加载的应用程序。 '/' 的初始路径在主 app.routes 中被捕获并重定向到延迟加载的模块。该模块也有自己的 submodule-1.routes 并且只是其他功能模块的容器。在 submodule-1.routes 中,我懒加载功能模块。据我所知,模块似乎没有被延迟加载。
我尝试在 submodule-1 本身中创建路由,并从那里延迟加载功能模块,但这没有帮助。
下面是文件夹结构
app
app.module.ts
app.routing-module.ts
-modules
--login
---login.module.ts
---login-routing.module.ts
---pages
----login-user
-----login-user.module.ts(LoginUserPageModule)
-----login-user-page.ts(LoginUserPage)
--signup
---signup.module.ts
---signup-routing.module.ts
----pages
-----signup-email
------signup-email.module.ts(SignUpEmailPageModule)
------signup-email-page.ts(SignUpEmailPage)
以下是我在 app.routes.ts 中的主要路线:
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: 'signup-email', loadChildren: './modules/signup/signup.module#SignupModule' },
{ path: 'login', loadChildren: './modules/login/login.module#LoginModule' },
];
@NgModule({
imports: [
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
],
exports: [RouterModule]
})
export class AppRoutingModule { }
注册模块
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { SignupRoutingModule } from './signup-routing.module';
@NgModule({
declarations: [],
imports: [
CommonModule,
SignupRoutingModule
],
exports:[]
})
export class SignupModule { }
SignupRoutes.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';
export const SIGNUP_ROUTES: Routes = [
{
path: '',
loadChildren: './pages/signup-email/signup-email.module#SignupEmailPageModule'
}
];
@NgModule({
declarations: [],
imports: [
CommonModule,
RouterModule.forChild(SIGNUP_ROUTES)
],
exports: [RouterModule]
})
export class SignupRoutingModule { }
注册电子邮件页面模块
import { SignupEmailPage } from './signup-email.page';
const routes: Routes = [
{
path: '',
component: SignupEmailPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule
,RouterModule.forChild(routes)
],
declarations: [SignupEmailPage]
})
export class SignupEmailPageModule {}
登录模块
@NgModule({
declarations: [],
imports: [
LoginRoutingModule
],
providers:[
]
})
export class LoginModule { }
登录路由
export const LOGIN_ROUTES: Routes = [
{
path: '',
loadChildren: './pages/login-user/login-user.module#LoginUserPageModule'
}
];
@NgModule({
declarations: [],
imports: [
RouterModule.forChild(LOGIN_ROUTES)
],
exports: [RouterModule]
})
export class LoginRoutingModule { }
登录用户页面模块
const routes: Routes = [
{
path: '',
component: LoginUserPage
}
];
@NgModule({
imports: [
IonicModule,
RouterModule.forChild(routes),
SharedModule
],
declarations: [LoginUserPage]
})
export class LoginUserPageModule {}
由于“/”的默认路径被定向到正在工作的登录,我希望注册模块是延迟加载的,并且只可见一次。然而,下面是我在应用程序初始加载时从 Augury 看到的图像,这使得 LoginModule 和 SignupEmailModule 似乎都被多次加载,并且根本没有延迟加载。结果,我看到 LoginUserPage 和 SignupEmailPage 已经从 Augury 加载,如下图所示。
从 app.routing.ts 中删除 { preloadingStrategy: PreloadAllModules } 之后。我确实看到模块现在是延迟加载的,但是,当我访问每个延迟加载的模块时,我会在下面的 Augury 图中看到一个额外的“延迟”节点。我不知道为什么会这样,如果它应该在那里?
此外,每当加载延迟加载的路由时,另一条路由会返回显示为延迟,它不应该只是从那时起保持加载吗?为什么它在图表中回到显示为“惰性”,几乎就像它没有加载一样。
【问题讨论】:
-
你有 { preloadingStrategy: PreloadAllModules },因此没有延迟加载
-
哇,我不敢相信我错过了。谢谢它现在正在工作,但有一件事很奇怪,我不确定我是否可以上传另一张图片。现在,我看到登录模块已加载,注册时显示为(惰性),如上图所示。但是,登录模块图仍然如上。我不确定为什么“懒惰”的中间节点在那里?当我加载注册页面时,它看起来也像上面的图片,中间节点只显示“懒惰”,我不确定这是从哪里来的。
标签: angular