问题描述: 在Angular 7中,当使用ControlValueAccessor来自定义表单控件时,该控件的有效状态不会传播给父表单。
解决方法: 要解决这个问题,我们需要手动更新父表单的有效状态。以下是一种解决方法:
private _control: NgControl;
// 在构造函数中注入NgControl
constructor(private control: NgControl) {
this._control = control;
}
private updateParentValidity(): void {
if (this._control && this._control.control) {
this._control.control.updateValueAndValidity();
}
}
set value(val: any) {
this.innerValue = val;
this.onChange(val);
this.onTouched();
// 更新父表单的有效状态
this.updateParentValidity();
}
通过这种方式,当自定义表单控件的有效状态改变时,将会手动更新父表单的有效状态。
请注意,以上代码示例是基于Angular 7的版本,如果你使用的是其他版本,可能会有一些差异。但是基本的思路是相同的,即手动更新父表单的有效状态。