Angular 9类库添加MatButton编译报错的问题求助
问题根源与解决方案
嘿,我一眼就发现问题所在啦!你遇到的NG6002和NG6003错误,核心原因是你把单个组件类MatButton直接加到了NgModule的imports数组里,但Angular的imports数组只接受NgModule类型的对象,不能放组件、指令或管道类。
正确的修复步骤
Angular Material的所有组件都是通过专属模块来提供的,MatButton对应的模块是MatButtonModule,你只需要做这两处修改:
- 替换导入语句
把原来的组件导入改成模块导入:
// 替换前 import { MatButton } from '@angular/material/button'; // 替换后 import { MatButtonModule } from '@angular/material/button';
- 更新NgModule的imports数组
在MultiSelectModule的imports里用MatButtonModule代替MatButton:
import { NgModule } from '@angular/core'; import { MultiSelectComponent } from './multi-select.component'; import { MatButtonModule } from '@angular/material/button'; import { FormsModule } from '@angular/forms'; import { SearchPipe } from './search.pipe'; @NgModule({ declarations: [MultiSelectComponent, SearchPipe], imports: [ MatButtonModule, FormsModule ], exports: [] }) export class MultiSelectModule { }
- 可选优化:如果需要让类库使用者直接用MatButton
如果你的类库使用者希望不用自己再导入MatButtonModule就能使用MatButton,可以把MatButtonModule加到exports数组里:
exports: [MatButtonModule]
补充提醒
Angular Material的每个组件都遵循“一个组件对应一个模块”的规则,比如MatInput对应MatInputModule、MatDialog对应MatDialogModule,以后引入其他Material组件时,记得都要导入对应的模块,而不是组件类本身哦!
内容的提问来源于stack exchange,提问作者Dilshan Liyanage
相关产品推荐
相关产品推荐

