angular 表单里面需要使用 自定义组件时,想要方便的使用formGroup的formControlName,需要自定义组件的formControlName属性,
如何去自定义组件的formControlName属性呢?
引入ControlValueAccessor 接口
ControlValueAccessor 接口是angular 表单组件的formControlName属性的依赖注入,ControlValueAccessor 接口需要实现registerOnChange、registerOnTouched、setDisabledState、writeValue方法,
我们这里不需要用到表单的disabled属性,所以可以忽略setDisabledState
我们新建input-number组件
引入NG_VALUE_ACCESSOR, 并写出对应的registerOnChange、registerOnTouched、writeValue方法
|
定义 updateValue 函数
新建 updateValue函数,并且在increment、decrement、writeValue函数中调用updateValue函数,更新表单的值
该组件显示数字,并且可以点击增加和减少按钮
|
为了不在每次更新count值的时候,都去手动调用updateValue函数,我们更新一下数据结构,让其在 count 值改变时,自动调用updateValue函数
|
至此,我们已经写好了自定义的 form 组件
使用自定义组件
响应式表单
下面我们在 form 表单里引入自定义组件,试试看效果
|
我们在组件下面显示出对应的 form 的表单值,可以看到,我们的自定义组件input-number已经生效了
模板驱动式表单
上面的例子我们是使用 formControlName, 下面我们使用ngModel同样可以
|
源码
- 本文作者: luckyship
- 本文链接: https://luckyship.github.io/2024/04/10/2024-04-10-angular-custom-form/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
