Angular 13模块已声明组件仍提示未识别问题咨询
问题根因
核心问题是你的AppModule的imports数组里错误引入了NgModule:NgModule是用来定义Angular模块的装饰器,不属于可导入的功能模块类。Angular 13版本没有对imports数组内的无效值做容错处理,无效的导入项会直接中断整个模块的声明解析流程,哪怕组件已经被写入declarations数组,也不会被编译器正确识别;Angular 14版本新增了imports无效项的静默过滤逻辑,会自动跳过不符合模块规范的导入项,因此相同代码在14版本可以正常运行。
另外你配置的CUSTOM_ELEMENTS_SCHEMA仅用于屏蔽原生自定义元素(Web Component)的识别报错,对Angular框架自身声明的组件不生效,加这个配置解决不了当前问题。
修复步骤
- 首先移除imports数组里的无效项
NgModule,修正后的imports配置参考如下:
imports: [ BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule, NgChartsModule, RouterModule ],
注:如果你的
AppRoutingModule已经导出了RouterModule,这里重复导入RouterModule不会触发报错,但属于冗余配置,可以按需删除。
- 检查
TesteComponent的组件元数据:确认@Component装饰器内的selector属性值确实为app-teste,不存在拼写错误、大小写错误、符号遗漏问题。 - 配置修改完成后完全重启本地开发服务,Angular 13的开发编译器对模块配置变更的热更新存在缓存问题,残留的旧编译缓存会导致报错不消失,重启服务即可清空缓存。
- 如果你给
TesteComponent配置了standalone: true(独立组件),不要把它放在declarations数组里,直接移入imports数组即可,不过从你描述的14版本可正常运行的情况来看,这个问题的触发概率极低。
内容的提问来源于stack exchange,提问作者Daniel Moreira
相关产品推荐
相关产品推荐

