Я пытаюсь связать выбор матов со значением перечисления следующим образом:
<mat-form-field>
<mat-label>Type</mat-label>
<mat-select [(ngModel)]="selectedType" [compareWith]="compareType">
<mat-select-trigger>
{{types[selectedType]?.name}}
</mat-select-trigger>
<mat-option *ngFor="let type of types | keyvalue" [value]="type.key">
<mat-icon>{{type.value.icon}}</mat-icon> {{type.value.name}}
</mat-option>
</mat-select>
</mat-form-field>
И машинопись:
enum Type {
Hardware = 0,
Software = 1
}
types: { [TP in number]: { icon: string, name: string }; } = {
[Type.Hardware]: { icon: 'computer', name: 'Hardware' },
[Type.Software]: { icon: 'keyboard', name: 'Software' },
};
selectedType: Type;
compareType(type1: Type, type2: Type): boolean {
return ((type1 as Type) === (type2 as Type));
}
Я хочу, чтобы значение выбора было привязано к selectedType
, чего я пытаюсь добиться с помощью [(ngModel)]="selectedType" [compareWith]="compareType"
.
Проблема в том, что эта привязка данных не полностью идет в обе стороны.
Когда я присваиваю значение с помощью пользовательского интерфейса, привязка обновляется соответствующим образом, но когда я обновляю значение в моем коде, оно сбрасывает значение в пользовательском интерфейсе, снова показывая заполнитель. Однако, хотя пользовательский интерфейс отображает его неправильно, значение присваивается правильно.