【问题标题】:Angular 5 input within *ngFor not properly filling content*ngFor 中的 Angular 5 输入未正确填充内容
【发布时间】:2019-12-13 17:56:12
【问题描述】:

我在这个项目中使用 Angular 5,并且这个对象属性中有一个大小为 5 的字符串数组,我想在 ngFor 中显示输入字段。

但是,当我开始在第一个输入文本上输入任何信息时,它会破坏我的文本并跳转到下一个字段,因此这意味着我无法完成我正在编写的文本。

这是一张显示正在发生的事情的图片。

当db中有数据时,它会正确显示在它注册的索引中,例如:这是我的noSql数据库上的文档:

这是检索数据的表单:

而且,由于它正确显示了信息,我认为 ngModel 属性的定义是正确的......我不知道为什么当我开始输入任何新文本时它会跳转到下一个输入。

这是我的代码:

<div class="form-group" *ngFor="let email of user.email; let i = index">
    <label class="form-control-label" for="input-name">Field {{i}}</label>
    <input type="text" class="form-control" [(ngModel)]="user.email[i]" />
</div>

【问题讨论】:

    标签: angular angular5


    【解决方案1】:

    您的 ngFor 中没有 trackBy。因此,由于每次在数组中输入内容时都会更改数组的元素,Angular 会在数组中看到一个新字符串,销毁包含输入的 div 并重新创建它。由于输入在短时间内不存在,因此焦点转到下一个。

    解决方案:trackBy:

    trackByFn(index) {
      return index;
    }
    
    *ngFor="let email of user.email; trackBy: trackByFn; let i = index"
    

    https://stackblitz.com/edit/angular-nw1uhp-vcce1s?file=src/app/app.component.html

    其他解决方案:在数组中存储对象而不是字符串,并将电子邮件绑定到对象的属性。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2023-03-11
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多