在angular2

时间:2017-01-24 11:35:01

标签: angular typescript lazy-loading angular2-modules ng-modules

我的应用程序包含使用重量级外部程序包(ag-grid,大约1MB)的组件,它作为angular2模块(AgGridModule)提供。我想只在需要使用它的组件时才加载包,所以我的ContentModule及其所有子模块都是延迟加载的。整个结构看起来像这样:

enter image description here

但是,当我将AgGridModule导入Submodule1Submodule3时,它最终被包含在已编译的JS中两次,同时生成1.chunk.js和3.chunk.js大。我尝试将其导入ContentModule,但子模块无法识别AgGridModule中包含的组件,即使我将其列在exports的{​​{1}}属性中也是如此。

ContentModule

有没有办法在延迟加载的模块之间共享模块,或者将导入模块的某些组件暴露给延迟加载的子模块?

UPD:创建共享模块并将其导入子模块没有帮助,仍然有两个块,每个块大约1MB: enter image description here

UPD2:我通过将Submodule1和Submodule3合并到一个模块中来暂时解决了这个问题。

3 个答案:

答案 0 :(得分:5)

您需要创建SharedAgGridModule

@NgModule({
  imports: [
    AgGridModule.withComponents([])
  ],
  exports: [
    ContentModule,
    AgGridModule
  ]
})
export class SharedAgGridModule{}

然后你应该只为导入使用AgGrid的子模块导入这个模块。无需在这些子模块中导入ContentModule,因为它是在此模块中导出的

答案 1 :(得分:0)

您可以SharedModule使用import export以及AgGridModule export。您必须AgGridModule完整模块import,而不仅仅是您使用的组件。

然后,您可以SharedModuleSubmodule1中的Submodule3 <?php $input = [ [ 'name' => 'Paul', 'value_1' => 3, 'value_2' => 2, ], [ 'name' => 'John', 'value_1' => 6, 'value_2' => 5, ], [ 'name' => 'Steve', 'value_1' => 1, 'value_2' => 9, ], [ 'name' => 'Joe', 'value_1' => 8, 'value_2' => 1, ] ]; $cmp = function ($key) { return function ($a, $b) use($key) { if ($a[$key] < $b[$key]) { return 1; } }; }; usort($input, $cmp('value_1')); print_r($input); usort($input, $cmp('value_2')); print_r($input);

答案 2 :(得分:0)

我们面临同样的问题。

2解决方案

  1. 放入ShareModule导入并导出它。子模块导入 ShareModule。基本上,ShareModule没有延迟加载。
  2. 合并到同一路径/模块延迟加载。