我这里有一个角的形状
https://stackblitz.com/edit/angular-form-array-duplicate-validation
我对此有两个问题。
ExpressionChangedAfterItHasBeenCheckedError:表达式已更改 在检查过之后。前值:“ng-有效:false”。当前 值:“ng-有效:true”
如何避免这两个错误?
我该如何避免这些问题。
发布于 2019-02-15 07:22:16
使用trackBy
trackBy函数将索引和当前项作为参数,并需要返回该项的唯一标识符。
component.html
<div formArrayName="credentials" *ngFor="let creds of form.controls.credentials?.value; let i = index;trackBy: cmpare;">
<ng-container [formGroupName]="i">
<input placeholder="Username" formControlName="username">
<input placeholder="Password" formControlName="password">
</ng-container>
</div>component.ts
cmpare(index) {
return index;
}分叉示例:https://stackblitz.com/edit/angular-form-array-duplicate-validation-8mojks
发布于 2019-02-15 06:57:28
您已经迭代了每个value的FormControl of FormArray。因此,当该控件的值发生变化时,它会生成一个全新的对象,这就是为什么它会生成一个新的文本框,其中包含一些值。似乎文本框变得模糊了,但实际上它是新的文本框。
应该迭代数组的控件,而不是它的值。
更新代码:
<div formArrayName="credentials" *ngFor="let creds of form.controls.credentials?.controls; let i = index">
<div [formGroupName]="i">
{{form.controls.credentials.controls[i].value | json}}
<input type="text" placeholder="Username" formControlName="username">
<input type="text" placeholder="Password" formControlName="password">
</div>
</div>https://stackoverflow.com/questions/54703735
复制相似问题