Угловой 6: как получить доступ ко всем значениям параметров в раскрывающемся списке автозаполнения мат? - PullRequest
0 голосов
/ 17 сентября 2018

Учитывая пример в Angular docs , вы можете увидеть здесь , а также повторить ниже, как я могу получить доступ к остальным данным объекта в options?

Если, например, объект был не просто списком имен в формате key: value, но чем-то более сложным, например данными, поступающими из API:

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

Пример в документации слишком прост и не говорит мне, как получить name для отображения в поле ввода, а также получить соответствующий nameId в файле ts, необходимый для возврата запроса PUT через 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 Ответ

0 голосов
/ 17 сентября 2018

Я думаю, вы ищете опцию onSelectionChange:

Вы можете просто добавить к опции mat:

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

Каждый раз, когда вы выбираетезначение это будет срабатывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...