Мне нужно установить фокус определенного поля ввода после инициализации компонента, и я бы хотел, чтобы внутренний текст был полностью выбран. Глядя на Интернет для некоторого намека, я закончил писать speficic директиву, таким образом:Angular2 Управление фокусом и выбором программно
@Directive({
selector: '[focusControl]'})
export class FocusDirective {
@Input('focusControl') focusEvent: EventEmitter<boolean>;
constructor(@Inject(ElementRef) private element: ElementRef, private renderer: Renderer) {
}
ngOnInit() {
this.focusEvent.subscribe(event => {
this.renderer.invokeElementMethod(this.element.nativeElement, 'focus', []);
if (this.element.nativeElement.tagName == "INPUT") {
this.renderer.invokeElementMethod(this.element.nativeElement, 'select', []);
}
});
}}
В шаблоне, очевидно, я установить директиву на элементе:
<input type="text" class="form-control" tabindex="1" [focusControl]="userIdFocus" maxlength="32">
Затем, после того, как вид компонента инициализируется в функции обратного вызова AfterViewInit, я пытаюсь установить фокус и выберите:
ngAfterViewInit() {
this.userIdFocus.emit(true);
}
проблема заключается в поле получает фокус, но текст НЕ выбрано. Если я попытаюсь установить фокус по щелчку на кнопке, то все это будет работать корректно.
Я мог бы исправить это?
Чтобы выбрать все содержимое входного контроля при фокусе, Вы пробовали использовать <входной тип = «текст» класс = «форма-контроль» TabIndex = «1» OnClick = "this.focus(); this.select() " [focusControl] =" userIdFocus "maxlength =" 32 "> Я знаю, что это не директива Angular 2, но не решит ли ваша проблема? Обратите внимание на «onClik». – meDev