我有几个要求:
我在Angular中很难做到这一点。我得到的最接近的是:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<div *ngFor="let title of titles; let i = index">
<label>Box {{i}}</label>
<input type="text" [id]="'box' + i"
[ngModel]="titles[i]"
(keyup)="onKeyUp($event.target, i)"><br />
</div>
`
})
export class AppComponent {
titles = ['1', '2', ''];
onKeyUp(target, index){
this.titles[index] = target.value;
if(this.titles.length-1 === index){
this.titles.push('');
target.value = '';
}
document.getElementById('box' + index).focus();
}
}
唯一不对的是,当用户开始输入空输入时,焦点需要放在用户输入的输入上,而不是移动到列表中的输入。关于如何解决这个问题的任何建议?
在这里插入:https://plnkr.co/edit/VuSR6C6g0vVOsRQEq5T2
修改
感谢Vega在下面的回答,我想出了这个完美无缺的解决方案:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<div *ngFor="let title of titles; let i = index; trackBy: trackByFn">
<input type="text"
[(ngModel)]="titles[i]"
(ngModelChange)="onChange($event, i)"><br />
</div>
`
})
export class AppComponent {
titles = ['1', '2', ''];
trackByFn(item, id){
return item
}
onChange(target, index){
if(this.titles.length-1 === index){
this.titles.push('');
}
console.log(this.titles);
}
}
使用keyup事件在我更改为数据绑定ngModel时正常停止触发但在切换到ngModelChange之后一切都很棒。