Предположим, что у меня есть массив [1,2,3]. Я хочу перебрать все элементы и привязать их к ngModel. Когда я запускаю этот код после изменения первого элемента, второй получает то же значение. В чем проблема?
<div *ngFor="let x of array; let i = index;">
<input type="number" [(ngModel)]="x[i]">
</div>
ngFor
по умолчанию использует идентификатор объекта для сравнения значений, это прерывается, когда используются примитивные значения (число, строка, логическое значение), поскольку они изменяют идентификатор при изменении). Использование trackBy
позволяет настроить ngFor для индексации вместо идентификатора:
<div *ngFor="let x of array; let i = index;trackBy:trackByIdx">
<input type="number" [(ngModel)]="x[i]">
</div>
trackByIdx(index: number, obj: any): any {
return index;
}
У меня была та же проблема, на которую ответил @Günter Zöchbauer год назад, я надеюсь, что это может помочь кому-то пройти таким образом:
Angular2 ngМодель внутри ngFor
Спасибо снова Гюнтеру!
[(ngModel)]="x"
должно работать