материал 2 Автозаполнение: выберите вариант

Я хочу вызвать функцию, когда выбран параметр. После некоторого поиска кажется, что я должен использовать:

свойство optionSelections элемента MdAutocompleteTrigger

В документации: https://material.angular.io/components/component/autocomplete optionSelections Поток вариантов автозаполнения.

Я не понимаю, что такое поток, как это реализовать?


person Yoamb    schedule 23.02.2017    source источник
comment
Я могу иметь MdAutocompleteTrigger. В моем компоненте я добавляю: @ViewChild(MdAutocompleteTrigger) trigger:MdAutocompleteTrigger; `ngAfterContentInit() { setTimeout(() =›this.trigger.openPanel()); }` но я не могу использовать optionSelections, может ли кто-нибудь привести мне пример   -  person Yoamb    schedule 24.02.2017
comment
Я пробую это ngAfterContentInit() { setTimeout(() => Observable.merge(...this.trigger.optionSelections) .subscribe((option)=>console.log(option))); }, но не работает   -  person Yoamb    schedule 24.02.2017


Ответы (4)


В опции md вы можете установить «onSelect»

<md-autocomplete #auto="mdAutocomplete">
    <md-option (onSelect)="callSomeFunction()" *ngFor="let state of states" [value]="state.name">{{ state.name }}</md-option>
</md-autocomplete>

Начиная с бета-версии 3 функциональность изменилась:

<md-autocomplete #auto="mdAutocomplete">
    <md-option (onSelectionChange)="callSomeFunction()" *ngFor="let state of states" [value]="state.name">{{ state.name }}</md-option>
</md-autocomplete>
person Igor Janković    schedule 24.02.2017

Компонент автозаполнения материалов имеет собственный вывод события optionSelected:

Шаблон:

<mat-autocomplete (optionSelected)="onSelectionChanged($event)"> 
  <mat-option *ngFor="let item of myItems" [value]="item">
    {{ item }}
  </mat-option>
</mat-autocomplete>

Контроллер:

import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';

// ...

onSelectionChanged(event: MatAutocompleteSelectedEvent) {
  console.log(event.option.value);
}

См.: Документация по Angular Material API — MatAutocompleteSelectedEvent

person Martin Schneider    schedule 04.02.2018
comment
Важно не забыть знак $ и называть его событием только в шаблоне при подключении вывода события. Все остальное даст вам неопределенную переменную. Ничего не нашел по этому поводу в документах... не мог поверить.... - person Florian Leitgeb; 03.01.2019

Я не мог получить ответ «onSelect» с последним угловым материалом (2.0.0-beta.3). Это никогда не называлось.

Теперь я нахожу, что это:

  <md-option *ngFor="let item of item" [value]="item.name" (onSelectionChange)="myChangeFunc($event, item)">
    {{ item.name }}
  </md-option>

Другими словами, теперь он называется onSelectionChange. Документы по-прежнему кажутся расплывчатыми и продолжают говорить «Поток выбора параметров автозаполнения», что на самом деле ничего не значит.

См. также ответ Франческо, однако в большинстве ситуаций вам нужно будет передать $event, чтобы проверить информацию о событии.

person PeterS    schedule 02.05.2017
comment
@PeterS Я перешел на последнюю версию, и теперь onSelectionChange срабатывает дважды, если я выбираю новый элемент. Бывает ли это и у вас? Я создал вопрос SO с подробностями: stackoverflow.com/questions /44056913/ - person Francesco; 18.05.2017
comment
@Francesco Это известная ошибка: github.com/angular/material2/issues/4356 Он не был объединен с бета-версией 5 из-за конфликта кода, я надеюсь, что он находится в бета-версии 6, я не знаю никакого обходного пути, кроме кодирования двух изменений в очень быстрой последовательности/проверки текста в поле ввода. Вероятно, стоит дождаться исправления. - person PeterS; 19.05.2017
comment
Этот пример должен был быть на веб-сайте Angular Material. Это просто неаккуратная документация. Спасибо !!! - person Raheel Shah; 04.02.2019

Событие onSelectionChange заменило событие selected. Теперь можно узнать, когда элемент выбран или не выбран.

Необходимо передать параметр $event целевому методу, чтобы различать два случая, иначе md-autocomplete вызовет метод дважды (один раз с новым выбранным элементом и один раз с невыбранным/предыдущим значением).
Было бы неплохо, если бы в документации было немного больше ясности об этих изменениях.

Ниже показано, как получить только событие "on select":

Шаблон

<md-autocomplete #panel="mdAutocomplete" [displayWith]="displayFn">
  <md-option (onSelectionChange)="selected($event, country)" 
             *ngFor="let country of filteredCountries | async" [value]="country">
    <div class="selector-elements">
        {{ country.name }}
      </div>
</md-option>

Controller

 selected(event: MdOptionSelectionChange, country: ICountry) {
    if (event.source.selected) {
        this.propagateChange(country);
    }
}
person Francesco    schedule 19.05.2017
comment
Я не получаю никакого события, когда опция не выбрана. Я использую mat-autocomplete и onSelectionChange так же, как и в вашем примере. Есть идеи, почему? - person tif; 21.11.2019
comment
В примере кода используется старая версия материала Angular. Теперь вы должны использовать ‹mat-XX› вместо ‹md-XX›. В противном случае код должен оставаться действительным. Может быть, вы можете создать для него новый вопрос со своим кодом, чтобы я мог лучше вам помочь. Просто напишите мне здесь, а затем URL. - person Francesco; 21.11.2019