写一个简单易用可扩展vue表单验证插件(vue-validate-easy)

写一个vue表单验证插件(vue-validate-easy)

需求

目标:简单易用可扩展html

如何简单

开发者要作的

  1. 写了一个表单,指定一个name,指定其验证规则。
  2. 调用提交表单方法,能够获取验证成功后的数据。
  3. 调用重置表单方法重置表单
  4. 自定义验证方法

程序应该作的

  1. 获取表单元素,绑定事件
  2. 有输入时,获取表单值,使用开发者指定的规则进行验证,若验证错误给予错误提示。

实现方法

  • 获取原生表单元素,vue指令获取到的是包裹原生表单元素的外层元素,这里我使用data-type属性来获取原生表单元素
  • 验证规则,验证参数,自定义错误提示语 由 vue的指令值来获取
  • 提交时,咱们须要一个表单标识,这里我使用了data-scope属性来对表单进行分组
  • 重置,经过data-scope重置整个表单

经常使用方法

  • 懒验证,经过.lazy指令修饰符
  • 远程验证, 经过async await
  • 延时验证, .deay指令修饰符,和data-delay属性
  • 表单主动验证,单字段主动验证
  • 单字段表单重置

可扩展

  • 错误消息自定义
  • 验证方法自定义
  • 错误提示处理自定义
  • 自定义表单元素(不借助原生元素)

完成后的使用代码

// 你只要指定 data-scope data-name data-type v-validate-easy 这四个属性的值,而后经过调用this.V.$submit(scope)就能够进行提交表单了
<form>
    <div class="my-form-group" data-scope="register" data-name="email" data-type="input"
    v-validate-easy="[['required','邮箱为必填项目'],['email']]">
      <label>
        <div class="label">邮箱</div>
        <input class="input" type="text" spellcheck="false" placeholder="请输入邮箱"/>
      </label>
    </div>
    
    <div id="pwd" class="my-form-group" data-scope="register" data-name="password" data-type="input"
    v-validate-easy="[['required','密码不能为空'],['password'],['maxLength',[32],'密码最长为32位']]">
      <label>
        <div class="label">密码</div>
        <input class="input" type="text" spellcheck="false" placeholder="请再次输入密码"/>
      </label>
    </div>
    
    <div class="my-form-group" data-scope="register" data-name="password" data-type="input"
    v-validate-easy="[['required','确认密码不能为空'],['equalTo',['pwd'],'密码输入不一致']]">
      <label>
        <div class="label">确认密码</div>
        <input class="input" type="text" spellcheck="false" placeholder="请输入邮箱"/>
      </label>
    </div>
    <div class="btn-group">
      <button class="my-btn" @click.prevent="submit('register')">注册</button>
      <button class="my-btn" @click.prevent="reset('register')">重置</button>
    </div>
  </form>
methods: {
    reset(scope) {
      this.V.$reset(scope)
    },
    submit(scope) {
      this.V.$submit(scope, (canSumit,data) => {
        // canSumit为true时,则全部该scope的全部表单验证经过
        if(!canSumit) return

        // 发送请求
        axios({ url: '/test',data, method: 'post'})
          .then(() => {
            // 成功响应处理
          })
          .catch(() => {
            // 错误处理
          })
      })
    }
  },

对自定义组件使用,就更加简洁

<form>
    <h3>用户登陆</h3>
    <my-input label="用户名" data-scope="login" data-name="username" v-validate-easy="[['required']]"></my-input>
    <my-input label="密码" data-scope="login" type="password" data-name="pwd" v-validate-easy="[['required']]"></my-input>

    <div class="btn-group">
      <button class="my-btn" @click.prevent="submit('login')">登陆</button>
      <button class="my-btn" @click.prevent="reset('login')">重置</button>
    </div>
  </form>

vue-validate-easy github地址

欢迎你们star,对该项目有什么问题和建议,欢迎提issuevue

vue-validate-easy 文档地址

相关文章
相关标签/搜索