我有一个角形的表格。该表单由一个具有多个选项的ngFor组成。
<div *ngFor="let item of items; let i = index">
<select name="" id="" [(ngModel)]="items[i]">
<option *ngFor="let option of options" [value]="option.value">{{option.display}}</option>
</select>
</div>
此示例的数据:
options = Array(10).fill(1).map((option,index) => {
return {
display:'thing' + index,
value: index
};
});
items = [2,7,2,7,2,7,2,7];
奇怪的是,当我改变第二个选择时,第四个选择将反映相同的变化。但是该模型不会反映这种变化。
出于什么原因,视图将在匹配之后更改输入2索引。更奇怪的是,这只会在第一次发生,然后它会表现出你的预期。
以下是看到问题的傻瓜: http://plnkr.co/edit/q1YnoPBFdBKm0JDMVk7Q?p=preview
这会导致什么?我该如何解决这个问题?
答案 0 :(得分:1)
@yurzui有正确的答案trackBy
可以防止任何不必要的突变。以下是包含trackBy
的代码:
<div *ngFor="let item of items; let i = index; trackBy: trackByFn">
<select name="" id="" [(ngModel)]="items[i]">
<option *ngFor="let option of options" [value]="option.value">{{option.display}}</option>
</select>
</div>
trackBy
取一个函数很重要,这是我解决这个问题的一个错误:
trackByFn(i: number) {
return i;
}
@yurzui的工作示例提供程序: