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

  • 相关阅读:
    Datastage 调度相关 dsjob
    DropdownList内容树状展示 字段前空格不显示
    IE兼容低版本设置
    跑数速度慢,修改参数
    cognos samples 安装配置【转】
    在子窗口中操作父窗口(刷新)
    html长文本自动换行
    Asp.net禁止缓存
    【Range Lookup】 根据年龄 求年龄分段ID
    目标表已有对应数据则不插入
  • 原文地址:https://www.cnblogs.com/boxrice/p/15059267.html
Copyright © 2011-2022 走看看