У меня есть поле ввода, которое я хочу отключить, когда пользователь нажимает клавишу «Ввод».Затем он попытается получить данные пользователя.Когда он извлек подробности или произошла ошибка, я хочу снова включить поле ввода и установить фокус на этом поле.
Я использую эту директиву, чтобы установить фокус на поле ввода:
import { Directive, OnChanges, ElementRef, Input } from '@angular/core';
@Directive({
selector: '[myFocus]'
})
export class FocusDirective implements OnChanges {
@Input('myFocus') isFocused: boolean;
constructor(private hostElement: ElementRef) { }
ngOnChanges() {
if(this.isFocused) {
this.hostElement.nativeElement.focus();
}
}
}
Это реализовано в HTML следующим образом:
<input type="text" class="form-control" [(ngModel)]="text"
[myFocus]="isFocused" [disabled]="disableInput"
(keydown)="podcastsKeyDown($event)">
Функция podcastKeyDown () выглядит следующим образом:
podcastsKeyDown(event) {
if(event.keyCode == 13) {
this.disableInput = true;
this.getUser(this.text).subscribe(account => {
this.disableInput = false;
this.isFocused = true;
});
}
}
Когда учетная запись пользователя успешновернул я установил поле ввода для включения, которое работает правильно.Однако фокус не возвращается к этому вводу.Я попытался установить таймаут вокруг переустановки фокуса на случай, если возникнет какая-то проблема с синхронизацией, однако это тоже не сработало.Код выглядел так:
setTimeout(() => {
this.isPodcastNamesFocused = true;
}, 100);
Есть идеи, что здесь происходит и как это исправить?
Заранее спасибо.
РЕДАКТИРОВАТЬ 1: Если быть точным - он действительно работает первый раз при использовании тайм-аута, но для последующих записей пользователя он не ...