Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何获取数组的引用';s项目是否正确(使用ngModel)?_Angular_Angular2 Template - Fatal编程技术网

Angular 如何获取数组的引用';s项目是否正确(使用ngModel)?

Angular 如何获取数组的引用';s项目是否正确(使用ngModel)?,angular,angular2-template,Angular,Angular2 Template,这是我的组件模型: fields: Field []; //where export class Field { key: string; value: string; } 用户可以动态推送/删除此模型阵列的项: pushField() { this.fields.push({ key: "", value: "" }); } removeField(index: number) { this.fields.splice(index, 1); } 我的目的是实

这是我的组件模型:

fields: Field [];

//where
export class Field { 
   key: string;
   value: string;
}
用户可以动态推送/删除此模型阵列的项:

pushField() {
    this.fields.push({ key: "", value: "" });
}
removeField(index: number) {
    this.fields.splice(index, 1);
}
我的目的是实现验证:
任何
字段
项都是必需的(不能是空字符串):


必需的错误消息
它完全有效,但我有以下奇怪的行为:

  • 有时,对于刚刚推送的项目,错误消息不会隐藏(即忽略原始规则)
  • 一项复制另一项的错误消息隐藏状态(即,如果一项为空,则显示另一项的错误消息)-这种情况很少发生

这种行为的原因是什么?我认为原因是获取字段项的引用是错误的:
#field=“ngModel”
(将代码转换为迭代)。那么,我如何才能获得正确的参考资料呢?

您是否尝试过使用
trackBy
?我应该怎么做才能在这个plunker中重现您的问题?@yurzui,是的,我无法在plunker中重现那个问题。因此,这不是一个错误的参考,这个问题是invalid@yurzui我已经找到了这种行为的方法:在plunker代码中,尝试将模板放置在表单标记中。因此,如果从fields数组中删除任何项,则最后一个输入项将被视为新的推送项(复制其值,ng类)。我对这个问题一无所知。你有没有试过使用
trackBy
?我该怎么做才能在这个plunker中重现你的问题?@yurzui,是的,我无法在plunker中重现这个问题。因此,这不是一个错误的参考,这个问题是invalid@yurzui我已经找到了这种行为的方法:在plunker代码中,尝试将模板放置在表单标记中。因此,如果从fields数组中删除任何项,则最后一个输入项将被视为新的推送项(复制其值,ng类)。我对这个问题一无所知
<div *ngFor="let field of fields; let i = index;">
    <input [(ngModel)]="fields[i].value" #field="ngModel" [name]=" 'fields['+i+'].key' "  type="text" required />
    <div [hidden]="field.pristine || !(field.errors && field.errors.required)" class="alert alert-danger"> Required error message </div>
</div>