You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material Table切换显示时报No value accessor错误如何解决?

错误诱因

Angular 的 [(ngModel)] 是专为表单控件设计的双向绑定指令,只有实现了 ControlValueAccessor 接口的元素/组件(比如 input、select、Angular Material 表单类组件)才支持该绑定。
你将 [(ngModel)] 绑定到了普通 <div> 元素上,div 不属于表单控件,没有对应的值访问器实现,因此框架解析绑定时就会抛出 No value accessor for form control with unspecified name attribute 错误。
另外这个绑定本身完全冗余:你通过 *ngIf="tableIsVisible" 控制显示隐藏,只需要单向读取该布尔值即可,不需要在 div 上做双向绑定。

修复方案

直接删除 div 标签上多余的 [(ngModel)]="tableIsVisible" 属性即可,修改后的代码如下:

<div class="mat-elevation-z8 layout-container" *ngIf="tableIsVisible">
  <table mat-table [dataSource]="dataSourceTable">
    <ng-container matColumnDef="index">
      <th mat-header-cell *matHeaderCellDef [attr.rowspan]="2">No.</th>
      <td mat-cell *matCellDef="let element; let i = index">{{ i + 1 }}</td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="header"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns; let i = index"></tr>
  </table>

  <mat-paginator [pageSizeOptions]="[5, 10, 20]" showFirstLastButtons aria-label="Select page of periodic elements"> </mat-paginator>
</div>

补充说明:如果后续需要对表单控件使用 ngModel 双向绑定,若控件处于 <form> 标签内,还需要同时给控件添加 name 属性,或是通过 [ngModelOptions]="{standalone: true}" 声明为独立表单控件。

内容的提问来源于stack exchange,提问作者denisiulian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:18:04