角度自动完成功能返回的值为[Object Object]

时间:2019-03-11 09:49:06

标签: angular angular-material-6

我的要求是在输入框中显示选定的值,并将选定的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

1 个答案:

答案 0 :(得分:2)

您要使用displayWith属性。根据手册:

  

如果要将选项的控制值(保存在表单中的值)   不同于该选项的显示值(在   文本字段),则需要在您的displayWith属性上进行设置   自动完成元素。一个常见的用例可能是   将数据保存为对象,但仅显示选项之一   字符串属性。

     

要执行此操作,请在要映射的组件类上创建一个函数   控制值到所需的显示值。然后将其绑定到   自动完成功能的displayWith属性。

模板端

<mat-autocomplete ... [displayWith]="getOptionText">

脚本端

getOptionText(option) {
  return option.name;
}

演示:https://stackblitz.com/edit/angular-mat-select-data-cddqia