我正在制作动态表格。 A Field
有一个值列表。每个值都由一个字符串表示。
export class Field{
name: string;
values: string[] = [];
fieldType: string;
constructor(fieldType: string) {this.fieldType = fieldType;}
}
我的组件中有一个函数可以为该字段添加一个新值。
addValue(field){
field.values.push("");
}
值和按钮在我的 HTML 中显示如下。
<div id="dropdown-values" *ngFor="let value of field.values; let j=index">
<input type="text" class="form-control" [(ngModel)]="field.values[j]" [name]="'value' + j + '.' + i"/><br/>
</div>
<div class="text-center">
<a href="javascript:void(0);" (click)="addValue(field)"><i class="fa fa-plus-circle" aria-hidden="true"></i></a>
</div>
一旦我在一个值的输入中写了一些文本,输入就会失去焦点。如果我向一个字段添加多个值并在其中一个值输入中写入一个字符,则该输入会失去焦点并且该字符会写入每个输入中。
原文由 Elbbard 发布,翻译遵循 CC BY-SA 4.0 许可协议
当数组是原始类型时会发生这种情况,在您的例子中是
String
数组。这可以通过使用TrackBy
来解决。因此,更改您的模板以匹配以下内容:并在 ts 文件中添加函数
trackByFn
,它返回值的(唯一)index
:这是关于同一问题的 链接,除了问题是针对 AngularJS 的,但问题与您的问题相对应。该页面最重要的摘录:
使用
TrackBy
Angular 可以根据唯一标识符跟踪添加(或删除)了哪些项目,并仅创建或销毁更改的内容,这意味着您不会失去对输入字段的关注:)如链接中所示,您还可以修改数组以包含唯一的对象并使用
[(ngModel)]="value.id"
例如,但这可能不是您需要的。