Я использую Clarity 3 и Angular 9. У меня есть модальное окно с одним полем ввода. Когда модальное открыто, поле ввода должно быть в фокусном состоянии.
Вот код для моего модального окна:
<clr-modal [(clrModalOpen)]="modal">
<h3 class="modal-title">I have a nice title</h3>
<div class="modal-body">
<p>This input should get the focus when modal is opened.</p>
<input class="clr-input" type="text" #input>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="close()">Close</button>
</div>
</clr-modal>
Проблема в том, что Clarity не обеспечивает обратный вызов, когда модальное открыто. Если я попытаюсь установить фокус в методе open()
, то я не смогу этого сделать, потому что к этому времени модальное окно еще не открылось из-за анимации.
@ViewChild('input', { static: false }) input: ElementRef;
open() {
this.modal = true;
this.input.nativeElement.focus(); // does not work
}
Если я установлю некоторую задержку с setTimeout
, когда это работает, но мне не нравится такое решение.
setTimeout(() => this.input.nativeElement.focus(), 10);
Я также пытался использовать директиву clrFocusOnViewInit
, но она также не работает.
<input class="clr-input" type="text" #input [clrFocusOnViewInit]="true">
Может кто-нибудь предложить мне хорошее решение? Почему директива clrFocusOnViewInit
не работает?
https://stackblitz.com/edit/clarity-focus-on-view-init
Обновление
Я создал запрос функции в Проект ясности: https://github.com/vmware/clarity/issues/4476