Как получить идентификатор выбранного значения в опции Mat-Select в Angular 5
Как получить идентификатор выбранного значения опции в матовом выборе углового 5. Получить только значение выбранной опции в onchangeevent. но как получить идентификатор выбранного значения опции.
client.component.html
<mat-form-field>
<mat-select placeholder="Client*" #clientValue (change)="changeClient($event)">
<mat-option *ngFor="let client of clientDetails" [value]="client.clientName">
{{client.clientName | json}}
</mat-option>
</mat-select>
</mat-form-field>
client.component.ts file
export class Client{
changeClient(event){
console.log(event);
}
}
Ответы
Ответ 1
Для этого вам необходимо:
Измените (change)="changeClient($event)"
на (change)="changeClient($event.value)"
и от [value]="client.clientName"
до [value]="client.id"
<mat-form-field>
<mat-select placeholder="Client*" #clientValue (change)="changeClient($event.value)">
<mat-option *ngFor="let client of clientDetails" [value]="client.id">
{{client.clientName}}
</mat-option>
</mat-select>
</mat-form-field>
РАБОЧАЯ ДЕМО
Ответ 2
Этот вопрос специфичен для Angular 5, но для других, пришедших сюда с более новой версией Angular, событие (change)
не будет работать для mat-select.
В Angular 6 событие (change)
было изменено на (selectionChange)
.
Так будет:
<mat-form-field>
<mat-select placeholder="Client*" #clientValue (selectionChange)="changeClient($event.value)">
<mat-option *ngFor="let client of clientDetails" [value]="client.id">
{{client.clientName}}
</mat-option>
</mat-select>
</mat-form-field>
И в компоненте:
changeClient(value) {
console.log(value);
}
Из этого ответа и документации.
Ответ 3
Вы также можете подписаться на изменение значений mat-select
с помощью декоратора ViewChild
и ngAfterViewInit
, которые менее "html-навязчивы".
Вот пример:
[HTML]
<mat-form-field [floatLabel]="auto">
<mat-label>Type</mat-label>
<mat-select #matSelect required> //the #matSelect is important here
<mat-option *ngFor="let type of types" [value]="type.value">
{{type.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>
[TS]
import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { MatSelect } from '@angular/material';
@Component({
selector: 'app-export-security-pack-material',
templateUrl: './export-security-pack-material.component.html',
styleUrls: ['./export-security-pack-material.component.scss']
})
export class ExportSecurityPackMaterialComponent implements AfterViewInit {
constructor() {}
types: Object[] = [
{ value: 'example-value-0', viewValue: 'ExampleViewValue0'
},
{ value: 'example-value-1', viewValue: 'ExampleViewValue1' }
];
@ViewChild('matSelect') matSelect: MatSelect;
//Reference Variable //variable Name //Type
ngAfterViewInit() {
this.matSelect.valueChange.subscribe(value => {
console.log(value);
});
}
}
При этом ваше значение должно регистрироваться в консоли разработки Ctrl+Shift+I
или F12
каждый раз, когда вы меняете значение селектора.
или вы можете буквально просто сделать это, если вам не нужен onchange:
[HTML]
<mat-form-field [floatLabel]="auto">
<mat-label>Type</mat-label>
<mat-select [(value)]="matSelectValue" required> <---
<mat-option *ngFor="let type of types" [value]="type.value">
{{type.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>