模块 - 延迟加载模块

优质
小牛编辑
139浏览
2023-12-01

为了显示这种关系,让我们开始定义一个简单的模块,作为我们的示例应用程序的根模块。

app/app.module.ts

到目前为止,这是一个非常常见的模块,依赖于,有一个路由机制和两个组件:AppComponentEagerComponent。 现在,让我们专注于定义导航的应用程序(AppComponent)的根组件。

app/app.component.ts

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'app-root',
  4. template: `
  5. <h1>My App</h1>
  6. <nav>
  7. <a routerLink="eager">Eager</a>
  8. <a routerLink="lazy">Lazy</a>
  9. </nav>
  10. <router-outlet></router-outlet>
  11. `
  12. export class AppComponent {}

我们的导航系统只有两条路: eager 和。 要知道当点击它们时加载哪些路径,我们需要看看我们传递给根模块的路由对象。

app/app.routing.ts

app/eager.component.ts

  1. import { Component } from '@angular/core';
  2. @Component({
  3. template: '<p>Eager Component</p>'
  4. })
  5. export class EagerComponent {}

但更重要的是,我们可以看到,每当我们试图去lazy的路径,我们会懒加载一个模块,方便地称为LazyModule 。 仔细观察那条路由的定义:

这里有几个重要的事情要注意:

  1. 我们使用属性loadChildren而不是component
  2. 我们传递一个字符串而不是一个符号,以避免加载模块。
  3. 我们不仅定义了模块的路径,还定义了类的名称。

除了它有自己的路由和一个名为LazyComponent的组件,LazyModule没有什么特别的。

app/lazy/lazy.module.ts

  1. import { NgModule } from '@angular/core';
  2. import { routing } from './lazy.routing';
  3. @NgModule({
  4. declarations: [LazyComponent]
  5. })
  6. export class LazyModule {}

app/lazy/lazy.routing.ts

注意,我们使用方法调用forChild而不是forRoot来创建路由对象。 我们应该在为特征模块创建路由对象时始终这样做,无论模块应该是eagerly 还是 lazily加载。

最后,我们的LazyComponent非常类似于EagerComponent,并且只是一些文本的占位符。

app/lazy/lazy.component.ts

  1. import { Component } from '@angular/core';
  2. @Component({
  3. template: '<p>Lazy Component</p>'
  4. })

当我们第一次加载应用程序时,AppComponent中的将在浏览器中加载,我们应该看到导航系统和文本“Eager Component”。 直到这一点,LazyModule没有被下载,只有当我们点击链接“Lazy”所需的代码将被下载,我们将在浏览器中看到消息“Lazy Component”。