У меня есть новое приложение Angular 2 со списком полей input
. Когда пользователь нажимает клавишу возврата, я добавляю новое поле input
сразу после того, которое они редактируют в данный момент. Вернее, я (асинхронно) добавляю новую запись в массив в модели, что заставляет Angular 2 автоматически генерировать новое поле input
в ближайшем будущем.
Как сделать так, чтобы фокус input
автоматически изменялся на добавленный элемент?
РЕДАКТИРОВАТЬ 1:
В качестве альтернативы я получаю ссылку на объект модели, который вызывает генерацию DOM. Из кода компонента есть ли способ поиска элемента DOM, представляющего конкретный объект модели?
РЕДАКТИРОВАТЬ 2:
Вот мой код, чтобы просто сделать эту работу. Надеюсь, это достаточно оскорбительно для некоторых разработчиков Angular 2, чтобы поощрить ответ :-)
app.WordComponent = ng.core
.Component({
selector: 'word-editor',
template:'<input type="text" [value]="word.word" (input)="word.update($event.target.value)" (keydown)="keydown($event)"/>',
styles:[
''
],
properties:[
'list:list',
'word:word'
]
})
.Class({
constructor:[
function() {
}
],
keydown:function(e) {
if(e.which == 13) {
var ul = e.target.parentNode.parentNode.parentNode;
var childCount = ul.childNodes.length;
this.list.addWord("").then(function(word) {
var interval = setInterval(function() {
if(childCount < ul.childNodes.length) {
ul.lastChild.querySelector('input').focus();
clearInterval(interval);
}
}, 1);
});
}
}
});