Angular material select 没有正确绑定对象值

Angular material select not binding correctly the object value

我有一个非常简单的 angular material select 组件,它由对象数组填充。我尝试了与 ngModel 和组件 select 属性的双向绑定,但两者都没有按预期工作。

我期待的是: 更改 selected 选项会相应地更新 ngModel 值。

实际情况: 更改 selected 选项会触发 select 更改方法,但不会更新绑定属性。

重现方式: Select选项2然后回到选项1,只玩2个选项

转载地点: https://stackblitz.com/edit/angular-qpk2di

所以你的错误实际上并没有那么复杂你错误地使用了 [()] 大括号

  1. []是给变量绑定一个值
  2. () 用于事件处理

您在值 [(value)] 上使用了事件处理程序和 "databinder",但您只想绑定

[value] = "selected option"

事件由 (selectionOnChange)="handleYourEvent()" 事件处理

您可以使用 JSON.stringify 将您的对象转换为字符串以将其绑定,然后使用 JSON.parse 将其重新解析为对象以在您的 TS 文件中使用它。

In your ts file : 

stringifyValue(value) {
    return JSON.stringify(value); 
}

parseValue(value) {
    let selectedObj = JSON.parse(value); 
}

in your html :

<mat-select (selectionChange)="parseValue($event.value)" >
   <mat-option *ngFor="let obj of options" 
   [value]="stringify(obj)">{{ obj.name }}
   </mat-option>
</mat-select>