网站搜索

typescript - 如何在 Angular 中延迟加载共享组件?


我有一个组件 CompA,它被用于两个懒加载模块 LazyModuleA 和 LazyModuleB 中。我知道创建一个 SharedModule 并在两个懒加载模块中导入它的方法是可行的。但是 SharedModule 不是懒加载的,会被打包进 main.js。

有没有一种方法可以让 CompA 懒加载,同时可以在懒加载模块之间共享?

答案#1

我认为你把 shared 模块和 lazy 加载模块弄混了 -

懒加载模块仅在需要时被调用,而共享模块则完全不同。

让我们来看共享模块——在你的应用程序中,如果你有大约3个模块,并且这三个模块都依赖于相同的组件、指令或模块,与其在每个模块中都导入这些内容,你可以只在你的shared模块中导入它们,然后在所有模块中映射它们

应用模块(根模块)

@NgModule({
  declarations: [],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

懒加载模块

@NgModule({
  imports: [
    CommonModule,
    HttpClientModule,
    FormsModule,
    BoatsManagerRoutingModule,
  ],
  declarations: [],
  providers: []
})
export class LazyModule { }

检查上面的模块——你可能会看到 HttpClientModule 和 FormsModule 通常会在这两个模块中导入,现在 Shared 模块的作用就体现出来了

共享模块

 @NgModule({
     imports: [
       CommonModule,
       HttpClientModule,
       FormsModule,
     ],
     declarations: [],
     providers: [],
     exports: [
     HttpClientModule,
     FormsModule
    ]
  })
  export class SharedModule { }

现在我已经在一个 Shared 模块中导入了这两个模块,然后将它们导出,同样的方式,如果你有任何组件或指令是两者共有的,可以在共享模块中声明并导出它们——现在你唯一需要做的就是在上面创建的 Shared 模块中直接导入到 AppModule 和 LazyModule 中,然后你将可以访问 HttpClientModule 和 FormsModule。

所以这就是 SharedModule 的用法,没有必要对共享模块进行懒加载,因为它会被导入到各个模块中并获得访问权限

最后加载 Lazy 模块,你可以在路由上使用 loadChildern 属性来懒加载该模块

  {
    path: 'lazy',
    loadChildren: './folder/Lazy.module#LazyModule',
  }

希望这能解决你的问题——编程愉快!!