gpt4 book ai didi

Angular 6,this.formGroup.updateValueAndValidity()无法正常工作

转载 作者:行者123 更新时间:2023-12-04 23:35:32 27 4
gpt4 key购买 nike

我试图根据某些条件在formGroup控件中添加和删除验证器。

当我通过formGroup.updateValueAndValidity()更新验证程序以使其整体不更新时,好像我正在为每个控件(即formGroup.get('formControl').updateValueAndValidity())专门申请一样,它正在工作,但是我必须为每个控件编写代码,但我希望这不是正确的方法。我究竟做错了什么?

if (data == 'x') {
this.myForm.get('control2').setValue(null);
this.myForm.get('control2').setValidators(Validators.nullValidator);
this.myForm.get('control1').setValidators(Validators.required);
} else if (data == 'y') {
this.myForm.get('control1').setValue(null);
this.myForm.get('control1').setValidators(Validators.nullValidator);
this.myForm.get('control2').setValidators(Validators.required);
}
this.myForm.get('control1').updateValueAndValidity();
this.myForm.get('control2').updateValueAndValidity();

这是可行的,但是,
this.myForm.updateValueAndValidity();

这是行不通的。

最佳答案

updateValueAndValidity()是自下而上的,因此,如果您通过控件调用此方法,它将仅检查此控件及其父级的验证,而不会检查其子级。

有关更多详细信息,请参见github上的AbstractControl#updateValueAndValidity以了解其工作方式。

  updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {
this._setInitialStatus();
this._updateValue();

if (this.enabled) {
this._cancelExistingSubscription();
(this as{errors: ValidationErrors | null}).errors = this._runValidator();
(this as{status: string}).status = this._calculateStatus();

if (this.status === VALID || this.status === PENDING) {
this._runAsyncValidator(opts.emitEvent);
}
}

if (opts.emitEvent !== false) {
(this.valueChanges as EventEmitter<any>).emit(this.value);
(this.statusChanges as EventEmitter<string>).emit(this.status);
}

if (this._parent && !opts.onlySelf) {
this._parent.updateValueAndValidity(opts);
}
}

关于 Angular 6,this.formGroup.updateValueAndValidity()无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58832992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com