Angular Material Table绑定dataSource报错:table无该属性,导入模块仍未解决
Can't bind to 'dataSource'错误 嘿,我之前也踩过这个坑,咱们一步步排查,应该能搞定:
先确认表格标签是否正确
这是最容易犯的低级错误!别用原生的<table>标签,Angular Material的表格组件对应的是<mat-table>,如果写错成普通table,肯定会报这个错。检查下你的模板代码是不是这样写的:<mat-table [dataSource]="yourDataSource"> <!-- 列定义内容 --> </mat-table>核对MatTableModule的导入范围
你说已经导入了MatTableModule,但要注意:如果你的组件在懒加载模块或者非根模块里,必须在该组件所属的NgModule里也导入MatTableModule,而不是只在AppModule里导入。比如你的组件在UserModule里,那UserModule的imports数组里必须加上MatTableModule。
如果用了共享模块,还要确保共享模块不仅导入了MatTableModule,还把它加到exports数组里,这样其他模块导入共享模块时才能使用这个组件。排查版本兼容性问题
检查你的Angular和Angular Material版本是否匹配。比如Angular 16+的Material和旧版本Angular可能存在模块结构差异。可以运行ng version查看版本,确保@angular/core和@angular/material的大版本一致(比如都是16.x或者17.x)。如果版本不匹配,建议升级到对应兼容的版本。检查拼写与大小写错误
确认模板里的[dataSource]大小写完全正确——Angular的输入属性区分大小写,别写成[datasource]或者[DataSource],必须是小写d开头、后续驼峰的dataSource。关于CdkTableModule的补充说明
你提到按照GitHub Issue导入了CdkTableModule,但其实如果用的是mat-table,只需要导入MatTableModule就足够了。CdkTable是基础的CDK组件,如果你没直接使用<cdk-table>,不需要额外导入它,反而可能造成混淆。可以先移除CdkTableModule的导入,看看问题是否解决。
如果以上步骤都试过还是不行,建议把你的模块代码(比如xxx.module.ts)和模板关键部分贴出来,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者Mateo Casasbuenas

