我的要求是在输入框中显示选定的值,并将选定的ID和值保存到.ts文件中。由于需要Id和Value,因此我将选项值直接绑定到[value]。但是,如果我这样做,它将被打印为[Object Object]。
<mat-form-field appearance="outline" class="w-100">
<mat-label>Enter Hotel Name</mat-label>
<input type="text" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="selectedclient($event)">
<mat-option *ngFor="let option of clients; let i = index" [value]="option">
{{ option.name }}
</mat-option>
</mat-autocomplete>
<mat-icon matSuffix>location_on</mat-icon>
</mat-form-field>
Ts文件
options = [
{ id: 1, name: 'One'},
{ id: 2, name: 'Two'},
{ id: 3, name: 'Three'}
];
selectedclient(event) {
console.log(event.option.value);
}
Stackblitz编辑器URL: https://stackblitz.com/edit/angular-mat-select-data-n4tvmj
答案 0 :(得分:2)
您要使用displayWith
属性。根据手册:
如果要将选项的控制值(保存在表单中的值) 不同于该选项的显示值(在 文本字段),则需要在您的
displayWith
属性上进行设置 自动完成元素。一个常见的用例可能是 将数据保存为对象,但仅显示选项之一 字符串属性。要执行此操作,请在要映射的组件类上创建一个函数 控制值到所需的显示值。然后将其绑定到 自动完成功能的
displayWith
属性。
<mat-autocomplete ... [displayWith]="getOptionText">
getOptionText(option) {
return option.name;
}
演示:https://stackblitz.com/edit/angular-mat-select-data-cddqia