Для захвата всего объекта в материале Angular, в отличие от чисто углового, вы используете [value]
для связывания всего объекта вместо [ngValue]
.
Кроме того, теперь, когда мы связываем весь объектвместо примитива нам нужно сравнить ваш предопределенный объект с объектом в массиве, поэтому мы можем использовать compareWith
, предоставленный Angular.Поэтому измените свой код на:
<mat-select placeholder="Favorite food" [(ngModel)]="selectedValueModel"
(ngModelChange)="changing($event)" name="food" [compareWith]="compFn">
<mat-option *ngFor="let food of foods" [value]="food"> <!-- Add food as value! -->
{{food.viewValue}}
</mat-option>
</mat-select>
А затем сравните с:
compFn(c1: Food, c2: Food): boolean {
return c1 && c2 ? c1.value === c2.value : c1 === c2;
}
Вот StackBlitz !