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>