Я создаю приложение Angular4. Я работаю с хорошим пользовательским интерфейсом и навигацией между полями формы, используя только клавиатуру. У меня такая проблема, когда пользователь нажимает клавишу Tab
и достигает этого знака +
(рис. 1), нажимает клавишу Enter
, затем эта кнопка переходит на следующую строку (рис. 2), и фокус теряется , Вопрос в том, как мне обработать эту клавишу Enter
, чтобы переместить фокус на следующую строку и сфокусироваться на ней selector
(со значением Merchant URL
по умолчанию).
Теперь, когда пользователь нажимает Enter
на +
, эта кнопка в шаблоне исчезает из-за * ngIf и генерируется новая строка. Любой совет, как сделать это, чтобы добиться приятного пользовательского опыта клавиатуры? Как изменить фокус с исчезающего +
на следующий компонент строки, который уже не виден, но в конце обработки Enter
он будет виден.
Рис 1.
Рис 2.
[РЕШЕНИЕ]
import { DOCUMENT } from '@angular/common';
import { Component, Inject, AfterViewChecked } from '@angular/core';
constructor(
@Inject(DOCUMENT) private _document: Document
) { // bla bla bla }
Поскольку я управляю сгенерированными элементами id
в шаблоне, я могу хранить id
элемента, на котором я хочу сосредоточиться во время обработки клавиши Enter
, и мне нужно реализовать AfterViewChecked
.
onEnter() {
this.focusOn = 'my-generated-element-id';
// put new model data to the array so template can generate new row
}
// this method is called very frequently so I only need to set focus
// when I need it and then clear focusOn variable.
ngAfterViewChecked(): void {
if (this.focusOn) {
let element = this._document.getElementById(this.focusOn);
if (element) {
element.focus();
this.focusOn = null;
}
}
}