Angular AutoComplete 将值作为 [Object Object] 返回

Gvs*_*hil 13 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>
Run Code Online (Sandbox Code Playgroud)

Ts文件

    options = [
        { id: 1, name: 'One'},
        { id: 2, name: 'Two'},
        { id: 3, name: 'Three'}
       ];

selectedclient(event) {
     console.log(event.option.value);
   }
Run Code Online (Sandbox Code Playgroud)

Stackblitz 编辑器网址:https ://stackblitz.com/edit/angular-mat-select-data-n4tvmj

Jet*_*eto 31

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

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

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

模板端

<mat-autocomplete ... [displayWith]="getOptionText">
Run Code Online (Sandbox Code Playgroud)

脚本端

getOptionText(option) {
  return option.name;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它按预期工作,但我收到此错误。错误错误:未捕获(承诺):类型错误:无法读取 null 的属性“名称”类型错误:无法读取 MatAutocomplete.push../src/app/pages/hotels/homepage/homepage.component 处的 null 属性“名称”。 ts.HomepageComponent.getOptionText [as displayWith] (homepage.component.ts:49) 在 MatAutocompleteTrigger.push../node_modules/@angular/material/esm5/autocomplete.es5.js.MatAutocompleteTrigger._setTriggerValue (autocomplete.es5.js:第925章)在autocomplete.es5.js:628 (2认同)
  • @GvsAkhil 这只是保存对函数的引用,Angular 会自动传递您设置为“[value]”的任何内容作为其参数。 (2认同)