Angular ngForm 内的 ngModel 和数字数组

Angular ngModel inside ngForm with number array

我被困在一个问题上有一段时间了,我不明白为什么会这样。

我的组件中有一个 values: number[] = [10,10] 变量。当我修改第一个输入时,在 keyDown 上,它有时会将我的光标移动到下一个输入,或者失去焦点。

这是一个 Plunker 示例:https://embed.plnkr.co/N4PO5CNvn0WJChgNIo59/

edit : 当两个值相同时,光标移动到下一个输入。示例:10、10。如果我输入任何数字,焦点将传输到下一个输入。顺便说一句,我使用的是 Chrome 最新版本

我遇到了这个问题,幸运的是我记得如何解决它!

要解决这个问题,您需要定义一个自定义 trackBy 函数。

将此添加到您的 *ngFor 中:

*ngFor="let val of values; let i = index; trackBy: trackByFn"

在你的组件 TS 中:

trackByFn(index, item) {
  return index; // or item.id
}

刚刚在 plunkr 上测试过,效果很好!

使用以下代码。

    import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: "./app.component.html"
})
export class AppComponent {
    values: number[] = [10, 10];
    label: string;

    public updateValue(event, index) {
        this.values[index] = +event.target.value;
        console.log(this.values);
    }
}



<div class="field">
    <span *ngFor="let val of values; let i = index">
      <input type="number" [attr.name]="'test' + i" [value]="val" (change)="updateValue($event, i)" >,
    </span>
  </div>