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 许可协议。转载请注明出处!