【问题标题】:Angular 2 model binding incorrect after removing array item删除数组项后,Angular 2 模型绑定不正确
【发布时间】:2017-09-15 23:31:49
【问题描述】:

我遇到了一个问题,即 Angular 2 模型绑定在删除并重新添加数组值后似乎保留了旧索引。仅当删除的值是数组开头或中间的索引时才会出现此问题,这导致我认为 Angular 在删除后仍保留旧索引。如果我从数组末尾删除一个项目并添加一个新项目,它会按预期工作。

这是我的 HTML:

<div class="row text-center" *ngFor="let date of vm.dates;let i = index;"><!--trackBy:i;-->
  <div class="col-md-6 text-right">
      <label>Date:</label>
  </div>
  <div class="col-md-6 text-left">

      <input name="Date{{i}}" type="text" class="form-control no-wrap" [(ngModel)]="date.Date" value="{{date.Date}}">
      <label *ngIf="showRemoveDate(i)" (click)="removeDate(i)" class="btn btn-danger no-wrap">Remove Date</label>
      <label>{{date.Date}}-{{i}}</label>
  </div>
</div>
<div class="row text-center">
  <div class="col-md-6 text-right">
      &nbsp;
  </div>
  <div class="col-md-6 text-left">
      <label (click)="addDate()" class="btn btn-danger">Add Date</label>
  </div>
</div>

这是我的 TypeScript 代码:

    removeDate(index: number) {
    this.vm.dates.splice(index, 1);
}

addDate() {
    var date: IDates = {
        Id: "",
        Date: "05/15/2014"
    };
    this.vm.dates.push(date);
}

-如果我删除三项数组中的第二项并添加新项,则第二个数组值的文本框与添加的新项相同,但我的结果视图返回正确的模型数据。

看图: enter image description here

【问题讨论】:

  • 您能否在 plunker 中重现该问题,尝试您的代码,据我所知,它似乎工作正常。
  • bcs 你硬编码了你的日期。所以它会被显示。对吗?
  • @RameshRajendran 不确定您对 “所以它会显示”是什么意思?

标签: javascript arrays angular model-binding


【解决方案1】:

在意识到您可能正在使用表单后,我设法重现了该问题。您对trackBy 进行了某种尝试,使用它应该可以解决您的问题。

<form #myForm="ngForm">
  <div *ngFor="let date of vm.dates;let i = index; trackBy: trackByFn">
    <!-- more code here -->
  </div>
</form>

以及功能:

trackByFn(index: any, date: any) {
  return index;
}

希望这会有所帮助! :)

【讨论】:

  • 做到了。谢谢您的帮助。我尝试将“trackBy”与索引一起使用,但没有奏效。有趣的是,我打算尝试一个单独的函数“trackBy”,但还没有实现。再次感谢!
  • 没问题,很高兴能帮上忙! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多