Angular2的ngModel和ngFor变量
Angular2 ngModel against ngFor variables
是否不可能(或尚不可能)使用ngModel
对ngFor
的值?Angular是在保护我不受糟糕性能的影响吗?
Works great: http://jsfiddle.net/langdonx/n5pjgev6/
<input type="text" [(ng-model)]="value">{{value}}
不太好用:http://jsfiddle.net/langdonx/n5pjgev6/1
<li *ng-for="#name of names">
<input type="text" [(ng-model)]="name">{{name}}
</li>
异常:不能重新分配变量绑定名
我也尝试绑定到数组,这…还行,但会劫持焦点并抛出异常:http://jsfiddle.net/langdonx/n5pjgev6/2/
<li *ng-for="#name of names; #i = index">
<input type="text" [(ng-model)]="names[i]">{{name}}
</li>
编辑:例外:生命周期。Tick被递归地称为
我可以使用更直接的方法绕过LifeCycle.tick
问题,但焦点仍然是被盗的,因为ngFor
重画的东西:http://jsfiddle.net/langdonx/n5pjgev6/3/
<li *ng-for="#name of names; #i = index">
<input type="text" [value]="names[i]" (input)="names[i] = $event.target.value">{{names[i]}}
</li>
我认为ngFor
不喜欢跟踪数组元素,这些元素是具有ngModel
的原始值。
如果你删除循环中的ngModel
,它会工作。
当我使用:
更新jsfiddle时,它也可以工作this.names = [{name: 'John'}, {name: 'Joe'}, {name: 'Jeff'}, {name: 'Jorge'}];
和
<li *ng-for="#n of names"><input type="text" [(ng-model)]="n.name">{{n.name}}</li>
解决方案是通过索引引用ngModel
内部的值。因此[(ngModel)]="names[index]"
.
但这是不够的,因为*ngFor
按值跟踪项。一旦值被改变,旧的值就不能被跟踪。因此,我们需要更改跟踪函数以返回索引,例如trackBy: trackByIndex
。
这个问题在这里解释。
解决方案:
@Component({
selector: 'my-app',
template: `
<div>
<input type="text"
*ngFor="let name of names; let nameIndex = index; trackBy: trackByIndex"
[(ngModel)]="names[nameIndex]"/>
<br/>
{{ names | json }}
</div>
`,
})
export class App {
names: string[];
constructor() {
this.names = ['a', 'b', 'c'];
}
public trackByIndex(index: number, item) {
return index;
}
}
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 将变量传递给外部Javascript
- Angular2的ngModel和ngFor变量