Ich habe eine neue Angular 2-App mit einer Liste von input
Boxen. Wenn der Benutzer die Eingabetaste drückt, füge ich input
unmittelbar nach dem Feld, das er gerade bearbeitet , ein neues Feld hinzu. Oder besser gesagt, ich füge (asynchron) dem Array im Modell einen neuen Eintrag hinzu, wodurch Angular 2 input
in naher Zukunft automatisch eine neue Box generiert .
Wie kann ich dafür sorgen, dass sich der input
Fokus automatisch auf das neu hinzugefügte Element ändert?
EDIT 1:
Alternativ erhalte ich einen Verweis auf das Modellobjekt, durch das das DOM generiert wird. Gibt es eine Möglichkeit, im Komponentencode nach einem DOM-Element zu suchen, das ein bestimmtes Modellobjekt darstellt?
EDIT 2:
Hier ist mein Code, damit dies funktioniert. Hoffentlich ist dies für einige Angular 2-Entwickler anstößig genug, um eine Antwort zu ermutigen :-)
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
solltest höchstwahrscheinlich nur ein seinsetTimeout
.