我以这种方式(为简便起见简化了)捆绑Kendo UI模块:
kendo-ui.module.ts
@NgModule({
exports: [
ButtonsModule
]
})
ui.module.ts
@NgModule({
exports: [
BrowserAnimationsModule,
KendoUiModule
]
})
core.module.ts
@NgModule({
exports: [ UiModule ]
})
app.module.ts
@NgModule({
imports: [ CoreModule ]
})
这是行不通的,因为Kendo UI模块不是全局可见的。
例如,要使Kendo UI组件能够在LoginComponent
中工作,我必须将KendoUiModule
导入AuthModule
。
我可以将KendoUiModule
移到shared
文件夹中,然后将其导入到需要它的每个模块中,但这是一种使组件可在整个应用程序中访问的效率低下的方法。
这是一个UI框架,它毕竟是整个应用程序的核心。
问题:什么是最好的处理方式,以使代码尽可能地精简?
这个问题也适用于其他情况。因此,以 Angular方法完成的有效解决方案将为 minimalist 方法提供另一种策略,而不会牺牲功能。
答案 0 :(得分:0)
说实话,我宁愿拆解shared
和kendo
模块。
Shared
应该有BrowserAnimationsModule
之类的东西。
ButtonsModule
我真的会只包括在app.module
或利用Kendo组件的模块中。
如果您真的想为剑道制作一个模块,然后像这样创建它,只需导入和导出仅剑道的东西:
kendo-ui.module.ts
import { ButtonsModule } from '@progress/kendo-angular-buttons';
@NgModule({
imports: [
ButtonsModule,
...
]
exports: [
ButtonsModule,
...
]
})
export { KendoUiModule }
然后为使用kendo的组件创建一个模块并导入该模块:
login.module.ts
import { KendoUiModule } from 'kendo-ui.module'
@NgModule({
declarations: [ LoginComponent ],
imports: [ KendoUiModule ]
exports: [ LoginComponent ]
})
或者,您可以直接将其导入。
login.module.ts
import { ButtonsModule } from '@progress/kendo-angular-buttons';
const kendoModules = [ButtonsModule, ...]
@NgModule({
declarations: [ LoginComponent ],
imports: [
...kendoModules
]
exports: [ LoginComponent ]
})
然后将组件本身以及诸如BrowserAnimationsModule
app.module.ts
@NgModule({
imports: [ LoginModule, BrowserAnimationsModule ]
})
优良作法是创建尽可能小的模块,然后仅将最必要的模块导入其中。最好是为每个组件增加一个模块。
如果您真的希望它们在全球范围内可用,则可以为kendo创建一个模块并将其提供在app.module.ts
中。但是,这仅适用于app.module.ts
声明的组件,而不适用于它导入的组件。这就是为什么我宁愿将它们导入每个组件本身。
但是最终要取决于您对它的喜欢程度。