我的应用程序包含使用重量级外部程序包(ag-grid,大约1MB)的组件,它作为angular2模块(AgGridModule
)提供。我想只在需要使用它的组件时才加载包,所以我的ContentModule
及其所有子模块都是延迟加载的。整个结构看起来像这样:
但是,当我将AgGridModule
导入Submodule1
和Submodule3
时,它最终被包含在已编译的JS中两次,同时生成1.chunk.js和3.chunk.js大。我尝试将其导入ContentModule
,但子模块无法识别AgGridModule
中包含的组件,即使我将其列在exports
的{{1}}属性中也是如此。
ContentModule
有没有办法在延迟加载的模块之间共享模块,或者将导入模块的某些组件暴露给延迟加载的子模块?
UPD:创建共享模块并将其导入子模块没有帮助,仍然有两个块,每个块大约1MB:
UPD2:我通过将Submodule1和Submodule3合并到一个模块中来暂时解决了这个问题。
答案 0 :(得分:5)
您需要创建SharedAgGridModule
:
@NgModule({
imports: [
AgGridModule.withComponents([])
],
exports: [
ContentModule,
AgGridModule
]
})
export class SharedAgGridModule{}
然后你应该只为导入使用AgGrid的子模块导入这个模块。无需在这些子模块中导入ContentModule
,因为它是在此模块中导出的
答案 1 :(得分:0)
您可以SharedModule
使用import
export
以及AgGridModule
export
。您必须AgGridModule
完整模块import
,而不仅仅是您使用的组件。
然后,您可以SharedModule
和Submodule1
中的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解决方案