Angular 6: how to access ALL option values in mat-

2019-08-12 10:53发布

Given the example in the Angular docs you can see here and also repeated below, how can I access the rest of the object data in options?

If for example, the object was more than just a simple list of names in key:value format, but something more complex such as data coming in from an API:

dataObject = {
  name: 'someName',
  nameID: 'someId',
  foo: 'bar'
  }

The example in the docs is too simple and isn't telling me how to get the name to display in the input field, and to also get the corresponding nameId in the ts file needed to return a PUT request via the API.

<form class="example-form">
  <mat-form-field class="example-full-width">
    <input type="text" placeholder="Assignee" aria-label="Assignee" matInput [formControl]="myControl" [matAutocomplete]="auto">
    <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn">
      <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
        {{option.name}}
      </mat-option>
    </mat-autocomplete>
  </mat-form-field>
</form> 

component.ts:

export class AutocompleteDisplayExample implements OnInit {
  myControl = new FormControl();
  options: User[] = [
    {name: 'Mary'},
    {name: 'Shelley'},
    {name: 'Igor'}
  ];
  filteredOptions: Observable<User[]>;

  ngOnInit() {
    this.filteredOptions = this.myControl.valueChanges
      .pipe(
        startWith<string | User>(''),
        map(value => typeof value === 'string' ? value : value.name),
        map(name => name ? this._filter(name) : this.options.slice())
      );
  }

  displayFn(user?: User): string | undefined {
    return user ? user.name : undefined;
  }

  private _filter(name: string): User[] {
    const filterValue = name.toLowerCase();

    return this.options.filter(option => option.name.toLowerCase().indexOf(filterValue) === 0);
  }
}

1条回答
啃猪蹄的小仙女
2楼-- · 2019-08-12 11:19

I think you're looking for the onSelectionChange option:

You can simple add, to the mat-option:

(onSelectionChange)="setID(option.nameID)"

Everytime when you select a value this will be triggered.

查看更多
登录 后发表回答