Проблема с вашим подходом заключается в том, что input
должен быть сфокусирован на (keyup.ArrowDown)
для запуска ... если вы думаете об этом, автозаполнение уже открывается, когда вы щелкаете внутри input
и побеждает цельиспользование (keyup.ArrowDown)
.
Следующее будет работать только после того, как вы щелкнете внутри input
, после чего откроется autoComplete
, а затем нажмите ArrowDown
.
openAutocomplete() {
console.log('ArrowDown Clicked')
}
То, что вы ищете, это слушатель на уровне документа для ArrowDown
, который откроет autoComplete
без input
, имеющего фокус.
Получите ссылку на MatAutocompleteTrigger
import { MatAutocompleteTrigger } from '@angular/material'
@ViewChild(MatAutocompleteTrigger) _auto: MatAutocompleteTrigger;
Настройка HostListener
для вызова openPanel()
, когда он видит событие клавиши ArrowDown
.
@HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
if (event.key == 'ArrowDown') {
this._auto.openPanel();
}
}
Stackblitz
Вам потребуетсящелкните в белой области под вводом в этом стеке, чтобы сфокусировать документ (не нажимайте / не фокусируйте ввод только на документе), а затем нажмите ArrowDown
, чтобы открыть autoComplete
https://stackblitz.com/edit/angular-vtepne?embed=1&file=app/autocomplete-simple-example.ts