在 Angular 中,我们不能在同一个 element 上有两个组件。
该错误表明 Angular 编译器找到了两个匹配<mat-form-field
元素的组件。
它还指向它发生的模块。
ng:///InputControlsModule/EmailInputComponent.html@1:2
并打印那些冲突的组件:
MatFormField,MatFormField
由于这些组件具有相同的名称,因此只能表示一个:
您以某种方式导入了InputControlsModule
导出MatFormField
指令的两个不同模块。
查看您的模块:
@NgModule({
imports: [
...
MatFormFieldModule,
MatInputModule
],
...
})
export class InputControlsModule {}
我注意到您导入MatFormFieldModule
了MatInputModule
导出MatFormFieldModule
(https://github.com/angular/material2/blob/8050f633b56b6c048fc72dad2ab79304afdfad19/src/lib/input/input-module.ts#L29)
但你可能会想:我阅读了文档,这应该不是问题,因为 Angular 缓存了一次导入的模块:
如果我两次导入同一个模块怎么办?
现在,看看你是如何导入这些模块的:
import { ...MatInputModule} from '@angular/material';
|
material.umd.js
import { MatFormFieldModule } from '@angular/material/form-field';
|
material-form-field.umd.js
正如你可以猜到的,因为这些模块来自不同的 js 文件,它们是不同的。
所以为了修复它,你应该从同一个包中导入它们。
import {
...
MatInputModule,
MatFormFieldModule
} from '@angular/material';
但是由于MatInputModule
已经导出MatFormFieldModule
,您不需要导入它。
分叉的 Stackblitz