У мене є нова програма Angular 2 із переліком input
вікон. Коли користувач натискає клавішу повернення, я додаю нове input
поле відразу після того, яке вони редагують. Вірніше, я (асинхронно) додаю новий запис до масиву в моделі, що змушує Angular 2 автоматично генерувати нове input
поле найближчим часом.
Як я можу зробити так, щоб input
фокус автоматично змінювався на щойно доданий елемент?
EDIT 1:
альтернативи я отримую посилання на об’єкт моделі, який спричиняє створення DOM. З коду компонента, чи є спосіб пошуку елемента DOM, що представляє конкретний об’єкт моделі?
EDIT 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);
});
}
}
});
setInterval
швидше за все, просто повинні бутиsetTimeout
.