Angular库中Material模块:导出复用还是应用单独导入?
关于Angular库中Material组件导入的解决方案
结论:在你的库模块中导出MatSelectModule,应用侧无需单独导入
具体操作
在你的库的核心模块(比如YourLibModule)里,不仅要导入MatSelectModule,还要把它加到exports数组里:
import { NgModule } from '@angular/core'; import { MatSelectModule } from '@angular/material/select'; // 导入你的库组件 import { YourLibComponent } from './components/your-lib.component'; @NgModule({ declarations: [YourLibComponent], imports: [ // 库内部需要用MatSelect,先导入 MatSelectModule ], exports: [ // 导出你的库组件,让应用能使用 YourLibComponent, // 导出MatSelectModule,这样应用导入你的库后就能识别mat-select指令 MatSelectModule ] }) export class YourLibModule { }
原理说明
Angular模块的作用域是封闭的——模块里导入的东西,只有导出后,外部模块(也就是你的应用模块)才能访问。如果只在库模块里导入MatSelectModule却不导出,应用侧导入你的库模块后,模板里的mat-select会因为找不到对应的指令报错。
这么做的好处是应用侧只需要导入你的库模块就行,不用额外处理Material的依赖,符合组件库封装的最佳实践,减少应用的配置成本。
内容的提问来源于stack exchange,提问作者Chris_272
相关产品推荐
相关产品推荐

