Существует проблема синхронизации между моментом запуска обратного вызова ng-select и элементом filterInput.Ваш синтаксис правильный, но filterInput не определен, когда выбрано ng-select open.Обратитесь к следующей ошибке в консоли отладки в предоставленном стеке:задержать вызов фокуса на неопределенном элементе в открытом обратном вызове.Ниже я только что сделал это путем 1) захвата filterInput ElementRef через @ViewChild, 2) рефакторинга вашей текущей логики фокуса в метод внутри компонента и добавление задержки 250 мс, и 3) вызова указанного метода с использованием открытого компонента ng-selectЭмитент событий.Я также предоставил альтернативу RxJS шагу 2.
app.component.ts
// 1
@ViewChild('filterInput') filterInput: ElementRef;
// 2
setFilterFocus() {
setTimeout((() => { this.filterInput.nativeElement.focus() }).bind(this), 250)
}
app.component.html
<!-- 3 -->
<ng-select #api [items]="cars"
[virtualScroll]="true"
[loading]="loading"
bindLabel="brand"
bindValue="id"
(scroll)="onScroll($event)"
(scrollToEnd)="onScrollToEnd()"
[dropdownPosition]="'bottom'"
[searchable]="false"
[(ngModel)]="selectedCar2"
[searchFn]="customSearchFn"
(change)="onChange($event)"
(open)="setFilterFocus()">
Повторный шаг 2 - вместо этого используется RxJS
app.component.ts дополнительный импорт
import { of } from 'rxjs';
import { delay, tap } from 'rxjs/operators';
app.component.ts setFilterFocus RxJS style
setFilterFocus() {
of(null)
.pipe(
delay(250),
tap(() => this.filterInput.nativeElement.focus()))
.subscribe();
}