это немного хакерское решение, но вы можете использовать метод closePanel MatAutocompleteTrigger следующим образом
<form class="example-form">
<mat-form-field class="example-full-width">
<input #inp="matAutocompleteTrigger"
(focus)="inputFocused(inp)"
type="text"
placeholder="Pick one"
aria-label="Number"
matInput [formControl]="myControl"
[matAutocomplete]="auto"
/>
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let option of options" [value]="option">
{{option}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
, а затем добавить следующий метод в ваш файл
focused(trg: MatAutocompleteTrigger) {
setTimeout(() => {
trg.closePanel();
});
}
используя settimeout, мы ожидаем следующего цикла обнаружения изменений, чтобы панель открылась, а затем мы ее закрыли.в результате панель открывается и закрывается за пару миллисекунд.
надеюсь, это поможет:)
=== не взломанное решение ====
я проверил свойреализации автозаполнения, и в одной из них, где у нас есть большое количество опций, мы использовали два массива опций: один - allOptions
, другой - filteredOptions
.FilterOptions изначально пуст, и я показываю только фильтрованные опции в шаблоне.Поэтому, если пользователь не введет что-то для ввода, ничего не отобразится (на самом деле я ввожу по крайней мере два символа для начала фильтрации, поскольку у allOptions есть пара тысяч параметров).
<form class="example-form">
<mat-form-field class="example-full-width">
<input type="text"
placeholder="Pick one"
aria-label="Number"
matInput
[formControl]="myControl"
[matAutocomplete]="auto"
/>
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let option of filteredOptions" [value]="option">
{{option}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
в моем файле ts;
allOptions: string[] = this.dataService.userOptions; // there are thousands of options
filteredOptions: string[] = [];
ngOnInit() {
this.myControl.valueChanges.subscribe(z => {
if (!z || z.length < 2) {
this.filteredOptions = [];
} else {
this.filteredOptions = this.allOptions.filter(el => el.toLowerCase().indexOf(z.toLowerCase()) >= 0);
}
}
Я надеюсь, это поможет больше:)