Извините за опоздание на вечеринку.Я действительно ужасаюсь, прочитав все ответы выше ...
Решение гораздо проще и прямее, чем любой из предложенных ответов, поскольку компонент select просто передает выбранную модель как часть аргумента selectionChange.
Но сначала несколько исправлений в вашем примере.Вы объявили интерфейс, поэтому ИСПОЛЬЗУЙТЕ ЕГО:
export interface FamilyRelation{
id: number;
type: string;
}
Итак, в вашем конструкторе:
constructor(){
this.familyRelationArray=[
{
id: 1,
type: 'Parent'
},
{
id: 2,
type: 'Sister'
}
]
}
, а не то, что вы положили в свой StackBlitz ... Тогда ваше представление будетстаньте так:
<mat-select (selectionChange)="onChange($event)" id="family_relation" placeholder="Family Relation">
<mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="familyRelation.id">
{{familyRelation.type}}
</mat-option>
</mat-select>
Нет необходимости в обработчике (щелчка) для каждого параметра mat, поскольку он не является необходимым и может привести к проблемам с производительностью, если у вас много параметров.Теперь на контроллере:
onChange(ev: any) {
let optionText = ev.source.selected.viewValue;
console.log(optionText);
}
или, если хотите, набранный вариант:
onChange(ev: MatSelectChange) {
let optionText = (ev.source.selected as MatOption).viewValue;
console.log(optionText);
}
, но не забудьте про импорт ...
import { MatSelectChange } from '@angular/material/select';
import { MatOption } from '@angular/material/core';
С уважением; -)