1.在自定义的表单组件中,需要实现ControlValueAccessor接口,这个接口的作用有两个:
- 将form模型中的值映射到视图中
- 当视图发生变化时,通知form directives或form controls
在自定义的表单组件中实现ControlValueAccessor接口的方式是将其注册为NG_VALUE_ACCESSOR:
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => KyCheckboxComponent ),
multi: true,
},
],
另外接口ControlValueAccessor中有三个必须实现的的方法:
- writeValue(obj:any):将表单模型的中的值写入视图中
// model view -> view value
writeValue(value: any): void {
this.kyChecked = value;
}
- registerOnChange(fn:any):用于注册在视图中某些内容发生改变时应该调用的的处理处理程序。它获取一个函数,告诉其他表单指令和表单控件更新其值。
// view value ->model value
registerOnChange(fn: any): void {
this.onModelChange = fn;
}
- registerOnTouched(fn:any):它专门为空间接收