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

Angular mat-select无法选中选项且控制台报Error trying to diff错误

问题根因

报错是因为你在onChangeCdp方法中,把用于渲染下拉选项的源数组tipoc直接赋值为了选中的字符串值(比如GASTO)。模板中*ngFor="let gas of tipoc"只能遍历数组/可迭代对象,遍历字符串时就会抛出该错误。

修复方案

1. TS代码调整

  • 补充声明双向绑定[(ngModel)]对应的变量tipoCdpValue,初始化时直接赋值第一个选项作为默认选中值
  • 修改onChangeCdp的赋值逻辑,将选中值存入专门的选中变量,不要修改选项源数组tipoc
    修改后完整TS代码:
interface tipoCdp {
  value: string;
  viewValue: string;
}

@Component({
  selector: '...',
  templateUrl: '...',
  styleUrls: ['...']
})

export class showValue implements OnInit {

  constructor (...) { ... }

  // 下拉选项源数组,仅用于渲染可选选项,不要修改该变量的值
  tipoc: tipoCdp[] = [
    {value: 'gasto-0', viewValue: 'GASTO'},
    {value: 'modificacion-1', viewValue: 'MODIFICACIÓN ANEXO DECRETO'}
  ];

  // 存储选中值的变量,和ngModel绑定,初始化默认选中第一个选项
  tipoCdpValue: string = this.tipoc[0].viewValue;

  onChangeCdp(event: string) {
    console.log(event);
    // 把选中值赋值给对应存储变量即可
    this.tipoCdpValue = event;
  }

}

2. HTML代码无需调整

你现有的HTML代码已经正确绑定了change事件和ngModel,无需修改。

修改完成后即可实现需求:默认选中第一个选项,选中任意选项时控制台打印对应值,同时值会自动存储到tipoCdpValue变量中,不会再抛出迭代错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:01