Angular 角度自定义窗体控件-获取默认值
我有一个自定义控件,它使用“ControlValueAccessor”-“registerOnChange”回调在窗体控件的值更改时将值发送到父窗体。没问题 但我还想发送在OnInit期间为自定义控件设置的默认值。问题是“registerOnChange”回调仅在OnInit之后发生 有办法吗?Angular 角度自定义窗体控件-获取默认值,angular,Angular,我有一个自定义控件,它使用“ControlValueAccessor”-“registerOnChange”回调在窗体控件的值更改时将值发送到父窗体。没问题 但我还想发送在OnInit期间为自定义控件设置的默认值。问题是“registerOnChange”回调仅在OnInit之后发生 有办法吗?ngAfterViewInit()将在运行registerChange方法后调用 您可以通过编程在此处设置输入值,但这不会调用已注册的onChange()方法(假设名称为onChange)。您需要显式地调
ngAfterViewInit()
将在运行registerChange
方法后调用
您可以通过编程在此处设置输入值,但这不会调用已注册的onChange()
方法(假设名称为onChange)。您需要显式地调用它。现在问题来自“ExpressionChangedTerithasBeenCheckedError”
问题是,如果父组件中存在到子控件的绑定,那么检查也可能发生在父组件中。调用detectchanges()
只会检查当前组件及其子组件中的更改。执行markForCheck()
会将此及其祖先标记为签入下一个更改检测,但不会立即调用更改检测。如果没有任何帮助,则肯定会出现setTimeout()
您可以选择以下内容:
ngAfterViewInit() {
setTimeout(() => {
this.value = "changed value";
this.onChange(this.value)
})
}
<input
[value]="value"
(input)="onChange($event.target.value)"
(blur)="onTouched()"
[disabled]="isDisabled"
type="text">
ngAfterViewInit(){
设置超时(()=>{
this.value=“更改的值”;
this.onChange(this.value)
})
}
请参见此处的示例:
但再说一遍,你为什么要这么做?在初始化被动表单时,您始终可以给出初始表单控制值。在设置表单时,您已经有了默认值。为什么你不能用它?添加的答案不能解决你的问题吗?谢谢。我正在按照您的建议使用setTimeout处理它。我需要它,因为我的自定义控件本身就有一个值,即使没有initialised@Muthukumar知道了!谢谢你接受答案!:)