gpt4 book ai didi

angular - ngFor 和 ngModel 在插入数组时重置输入

转载 作者:太空狗 更新时间:2023-10-29 18:13:43 25 4
gpt4 key购买 nike

我正在尝试创建一个表单,您可以在其中添加多行,然后再发送。为此,我将数据存储在一个 Lines 数组中,并使用 ngFor 和 ngModel 将数据绑定(bind)/检索到我的表单中。

我的代码是这样的

export class MyComponent implements OnInit {
lines : Line[] = [];

constructor() { }

ngOnInit() {
this.lines.push(new Line("XXXXXX1",0,0));
}

addLine(){
let line = (new Line("XXXXXX1",0,0));
this.lines.push(line);
}

save(){
console.log(this.lines);
}
}

class Line {
type: string;
qteRejet : number;
qteComm : number;

constructor(type: string = "XXXX1", qteRej: number = 0, qteComm : number = 0){
this.type = type;
this.qteRejet = qteRej;
this.qteComm = qteComm;
}
}

和表格:

      <div class="form-group">
<div class="row" *ngFor="let line of lines; let ind=index;">
<div class="col-lg-1">
<i class="fa fa-2x fa-plus-square add-btn" (click)="addLine()" *ngIf="lines[lines.length-1] === line"></i>
</div>
<div class="col-lg-3">
<select class="form-control" name="type" [(ngModel)]="lines[ind].type">
<option>XXXXXX1</option>
<option>XXXXXX2</option>
<option>XXXXXX3</option>
</select>
</div>
<div class="col-lg-4">
<input class="form-control" type="number" min="0" name="qteCommande" [(ngModel)]="lines[ind].qteComm">
</div>
<div class="col-lg-4">
<input class="form-control" type="number" min="0" name="qteRejet" [(ngModel)]="lines[ind].qteRejet">
</div>
</div>
</div>

当我一次添加所有行时,该表单可以完美运行。现在,当我尝试填充一行然后添加另一行时,出于某种原因,表单会重置之前输入的行。

enter image description here

但是当我检查我的数组时,它仍然有输入的值

enter image description here

有人可以解释这里发生了什么/我做错了什么吗?任何帮助将不胜感激。

编辑:我尝试按照 @Ploppy 的建议使用 trackBy 并在我的线路中添加了一个 id。我还将这一行添加到表单中:

<p>{{line.id}} | {{line.type}} | {{line.qteComm}} | {{line.qteRejet}}</p>

这就是正在发生的事情: enter image description here

表单重置但值已正确绑定(bind)。

最佳答案

所以我终于找出了我代码中的问题。我的输入在 form 中,添加一个新行添加了一个具有相同 name 的输入(这在 Agular 2 中是不允许的)。用 name=attribute-{{id}} 替换我的 name 属性解决了这个问题。

<div class="form-group">
<div class="row" *ngFor="let line of lines; let ind=index;">
<div class="col-lg-1">
<i class="fa fa-2x fa-plus-square add-btn" (click)="addLine()" *ngIf="lines[lines.length-1] === line"></i>
</div>
<div class="col-lg-3">
<select class="form-control" name="type-{{ind}}" [(ngModel)]="lines[ind].type">
<option>XXXXXX1</option>
<option>XXXXXX2</option>
<option>XXXXXX3</option>
</select>
</div>
<div class="col-lg-4">
<input class="form-control" type="number" min="0" name="qteCommande-{{ind}}" [(ngModel)]="lines[ind].qteComm">
</div>
<div class="col-lg-4">
<input class="form-control" type="number" min="0" name="qteRejet-{{ind}}" [(ngModel)]="lines[ind].qteRejet">
</div>
</div>
</div>

这是一个总结一切的 Plunker: Plunker

关于angular - ngFor 和 ngModel 在插入数组时重置输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com