Angular 角度6“;表达式ChangedTerrithasbeenscheckedError“;在反应式表单中动态表单验证添加和删除

Angular 角度6“;表达式ChangedTerrithasbeenscheckedError“;在反应式表单中动态表单验证添加和删除,angular,angular-reactive-forms,angular-forms,Angular,Angular Reactive Forms,Angular Forms,我使用的是Angular 6反应式表单,如果我在动态添加和删除新的验证器,我得到的错误是 expressionChangedTerithasBeenCheckedError:表达式已更改 检查过之后。上一个值:“已禁用:false”。现在的 值:“disabled:true” .ts文件 形式:FormGroup; _用户类型:任意[]=[ {{u id:'1',用户类型:'Sub Admin'}, {{u id:'2',用户类型:'Manager'}, ]; ShowReportsTo:Boo

我使用的是Angular 6反应式表单,如果我在动态添加和删除新的验证器,我得到的错误是

expressionChangedTerithasBeenCheckedError:表达式已更改
检查过之后。上一个值:“已禁用:false”。现在的
值:“disabled:true”

.ts文件

形式:FormGroup;
_用户类型:任意[]=[
{{u id:'1',用户类型:'Sub Admin'},
{{u id:'2',用户类型:'Manager'},
];
ShowReportsTo:Boolean=false;
构造函数(){}
恩戈尼尼特(){
this.Form=newformgroup({
用户类型:新FormControl(空,需要验证程序),
报告对象:新表单控件(空),
});
}
UserType_Change(){
const value=this.Form.controls['User\u Type'].value;
if(typeof value==='object'&&value!==null&&value.User\u Type!=='Sub Admin'){
this.ShowReportsTo=true;
this.Form.controls['Reports_To'].setValidators([Validators.required]);
this.Form.updateValueAndValidity();
}否则{
this.ShowReportsTo=false;
this.Form.controls['Reports_To'].clearValidators();
this.Form.controls['Reports_To'].setErrors(null);
this.Form.controls['Reports_To'].reset();
}
}
.html文件


用户类型:

带有*ngIf的div的内容会导致错误。试试这个:

<ng-container *ngIf="ShowReportsTo">
   <div class="col-sm-6 Form_Select">
     ...
   </div>
</ng-container>

...

这是在调用
UserType\u Change()
函数时发生的吗?是的
UserType\u Change()
是一个函数不,这不是我的意思。我想知道,何时发生了
表达式更改TerithasBeenCheckedError
错误。调用
UserType\u Change()
函数时是否发生了这种情况?您仍然面临这个问题还是希望得到好的解决方案?您的解决方案没有解决我的错误,我的错误位置是
Submit
Submit()中的内容?另外,您没有提到作为ng select使用的第三方库。错误来自于此,可能我对@kathir也有同样的问题。我的问题是我有一个动态表单数组,当我将新表单推入表单数组时,父表单组将变得无效,因为新推送表单的某些字段是必需的。并抛出相同的错误。有一段时间,在
@组件
中添加
changeDetection:ChangeDetectionStrategy.Default
使错误消失(出于某种原因),但这一次并没有解决问题。