zoukankan      html  css  js  c++  java
  • 让Angular自定义组件支持form表单验证

    Angular提供了一套非常强大的表单验证库(vue和react都需要第三方库的支持),可以非常方便简单实现web应用程序中的表单验证功能。但是如何让我们自定义的组件也支持验证呢?

    我遇到一个需求是封装WangEditor这个富文本编辑器放到表单中。

    这种需求是非常常见的,Angular给我们提供了ControlValueAccessor接口,我们可以很方便的实现自定义验证功能

    理解ControlValueAccessor

    用官方的话来说,ControlValueAccessor是充当 Angular 表单 API 和 DOM 中的原生元素之间的桥梁

    这个接口提供了四个方法

    interface ControlValueAccessor {
      writeValue(obj: any): void
      registerOnChange(fn: any): void
      registerOnTouched(fn: any): void
      setDisabledState(isDisabled: boolean)?: void
    }
    
    

    一般情况下,只需要处理writeValueregisterOnChange两个方法

    writeValue是formGroup把值传递给自定义组件,自定义组件需要根据这个值处理对应的显示状态。

    registerOnChange的参数是一个Function,需要在组件状态修改的时候,调用这个Function来把组件的值传递给formGroup

    注册Provider使当前的接口处理生效

    如果是单纯的实现了这个接口,是无法生效的。需要在模块注册或者组件上的Attribute中去注册NG_VALUE_ACCESSOR值为当前组件。

      providers: [{
        provide: NG_VALUE_ACCESSOR, useExisting: QWangEditorComponent, multi: true
      }]
    
    

    做完这一步后,这个组件就支持了Angular的表单验证功能了。

    在表单中,加上formControlName属性,自定义组件的功能就可以和formGroup中的对应属性实现双向绑定了,并支持表单验证了。

    最后

    欢迎关注我的公众号【青城同学】,不定时和你分享我各种技术和非技术的东西

    image

  • 相关阅读:
    一些个人看到觉得还不错的资料,现在先把记得的保存下来,以后碰到会继续更新
    鼠标 mouseover和mouseout事件
    phpqrcode 生成二维码
    django url路径与模板中样式相对路径的问题
    js parseInt和map函数
    WebService 布置简单的计算器
    java ++的使用
    java 运算符
    Java的概念
    public 有跟没有的区别
  • 原文地址:https://www.cnblogs.com/boxrice/p/15059267.html
Copyright © 2011-2022 走看看