Angular14升级后MatSelect报No provider错误排查
报错原因
你的自定义mat-select-search组件中MatSelect的导入路径错误,直接导致依赖注入失败:
- 你当前代码从
@angular/material-experimental/mdc-select导入实验性MDC版本的MatSelect类 - 但项目实际通过
MatSelectModule(从@angular/material/select引入)使用的是稳定版MatSelect
两个类是完全独立的注入令牌,Angular依赖注入体系无法匹配到父级渲染的稳定版MatSelect实例,因此抛出No provider for MatSelect!错误。
修复方法
直接修改mat-select-search.component.ts中的导入语句即可:
- 删除原有错误导入:
import { MatSelect } from '@angular/material-experimental/mdc-select'; - 替换为稳定版MatSelect的正确导入:
import { MatSelect } from '@angular/material/select'; - 额外排查项:检查项目中所有Material组件相关导入,把所有从
@angular/material-experimental路径引入的非主动使用的实验组件,全部替换为@angular/material/*对应路径下的稳定版导入,避免后续出现同类注入问题。 - 修改完成后重启开发服务、清除构建缓存,报错即可消失。
注:
mat-select-search作为mat-select的子组件,是通过依赖注入获取父级MatSelect实例的,必须保证注入用的类令牌和父级实际使用的MatSelect类完全一致,才能正确拿到实例。
内容的提问来源于stack exchange,提问作者Nikhil Makwana
相关产品推荐
相关产品推荐

