zoukankan      html  css  js  c++  java
  • Vee Validate

    Vee Validate

    安装

    yarn add vee-validate S

    ES6+

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    
    import { ValidationProvider, ValidationObserver } from 'vee-validate'
    
    import './local/vee-validate'
    
    // Register it globally
    Vue.component('ValidationObserver', ValidationObserver)
    Vue.component('ValidationProvider', ValidationProvider)
    Vue.config.productionTip = false
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')

    配置

    import { extend, configure } from 'vee-validate'
    // import { required, email } from 'vee-validate/dist/rules'
    import * as rules from 'vee-validate/dist/rules'
    import { messages } from 'vee-validate/dist/locale/zh_CN.json'
    // alpha
    // alpha_dash
    // alpha_num
    // alpha_spaces
    // between
    // confirmed
    // digits
    // dimensions
    // email Inferred
    // excluded
    // ext
    // image
    // oneOf
    // integer
    // is
    // is_not
    // length
    // max Inferred
    // max_value Inferred
    // mimes
    // min Inferred
    // min_value Inferred
    // numeric
    // regex Inferred
    // required Inferred
    // required_if
    // size
    // double
    
    // Add a rule.
    extend('secret', {
      validate: value => value === 'example',
      message: 'This is not the magic word'
    })
    
    extend('positive', {
      validate: value => value > 0,
      message: '请输入大于0'
    })
    
    extend('odd', value => {
      return value % 2 !== 0
    })
    
    extend('min', {
      validate: (value, arg) => {
        return value.length > arg.length
      },
      params: ['length'],
      message: (fieldName, placeholders) => {
        return `${fieldName}必须大于${placeholders.length}位数`
      }
    })
    
    // extend('required', {
    //   ...required,
    //   message: '请输入{_field_}'
    // })
    
    // extend('email', {
    //   ...email,
    //   message: '请输入正确的邮箱'
    // })
    
    Object.keys(rules).forEach(rule => {
      extend(rule, rules[rule])
    })
    
    Object.keys(rules).forEach(rule => {
      extend(rule, {
        ...rules[rule], // copies rule configuration
        message: messages[rule] // assign message
      })
    })
    
    configure({
      classes: {
        valid: 'is-valid',
        invalid: 'is-invalid',
        dirty: ['is-dirty', 'is-dirty'] // multiple classes per flag!
        // ...
      }
    })
    View Code

    代码

    ex1

     核心ValidationObserver,ValidationProvider

     表单验证handleSubmit,reset

    <template>
      <div id="app">
        <div class="layui-container">
          <validation-observer v-slot="{ handleSubmit, reset }">
            <form
              class="layui-form layui-form-pane"
              @submit.prevent="handleSubmit(onSubmit)"
              @reset.prevent="reset"
            >
              <div class="layui-form-item">
                <validation-provider rules="required|email" v-slot="{ errors }">
                  <label class="layui-form-label">用户名</label>
                  <div class="layui-input-inline">
                    <input
                      type="text"
                      name="用户名"
                      v-model.trim="name"
                      class="layui-input"
                      placeholder="请输入"
                    />
                  </div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <div class="layui-form-item">
                <validation-provider rules="required" v-slot="{ errors }">
                  <label class="layui-form-label">密码</label>
                  <div class="layui-input-inline">
                    <input
                      type="password"
                      name="密码"
                      v-model="pwd"
                      class="layui-input"
                      placeholder="请输入"
                    />
                  </div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <div class="layui-form-item">
                <validation-provider rules="required" v-slot="{ errors }">
                  <label class="layui-form-label">验证码</label>
                  <div class="layui-input-inline">
                    <input
                      type="text"
                      name="验证码"
                      v-model="code"
                      class="layui-input"
                    />
                  </div>
                  <div
                    class="layui-form-mid svg"
                    v-html="captcha"
                    @click="getCaptcha"
                  ></div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <button class="layui-btn" :class="{ 'layui-btn-disabled': invalid }">
                点击登录
              </button>
              <button class="layui-btn" type="reset">重置</button>
              <a href="javascript:void(0)" class="forget-pwd-link">忘记密码</a>
            </form>
          </validation-observer>
        </div>
      </div>
    </template>
    <script>
    import axios from 'axios'
    export default {
      name: 'app',
      data () {
        return {
          captcha: '', // 验证码
          name: '',
          pwd: '',
          code: '',
          errorMsg: [],
          invalid: false
        }
      },
      mounted () {
        this.getCaptcha()
      },
      methods: {
        onSubmit () {
          console.log('onSubmit')
        },
        getCaptcha () {
          axios.get('http://localhost:3000/getCaptcha').then(res => {
            if (res.status === 200) {
              if (res.data.code === 200) {
                this.captcha = res.data.data.svg
              }
            }
          })
        }
      }
    }
    </script>
    <style lang="scss" scoped>
    #app {
      background-color: #f2f2f2;
    }
    .layui-container {
      background-color: #fff;
    }
    input {
       190px;
    }
    .forget-pwd-link {
      margin-left: 10px;
      &:hover {
        color: #009688;
      }
    }
    .svg {
      position: relative;
      top: -15px;
    }
    </style>
    View Code

    ex2

     $refs

    <template>
      <div id="app">
        <div class="layui-container">
          <!-- <validation-observer v-slot="{ handleSubmit, reset }"> -->
          <validation-observer ref="form">
            <!-- <form
              class="layui-form layui-form-pane"
              @submit.prevent="handleSubmit(onSubmit)"
              @reset.prevent="reset"
            > -->
            <form @submit.prevent="onSubmit">
              <div class="layui-form-item">
                <validation-provider rules="required|email" v-slot="{ errors }">
                  <label class="layui-form-label">用户名</label>
                  <div class="layui-input-inline">
                    <input
                      type="text"
                      name="用户名"
                      v-model.trim="name"
                      class="layui-input"
                      placeholder="请输入"
                    />
                  </div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <div class="layui-form-item">
                <validation-provider rules="required" v-slot="{ errors }">
                  <label class="layui-form-label">密码</label>
                  <div class="layui-input-inline">
                    <input
                      type="password"
                      name="密码"
                      v-model="pwd"
                      class="layui-input"
                      placeholder="请输入"
                    />
                  </div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <div class="layui-form-item">
                <validation-provider rules="required" v-slot="{ errors }">
                  <label class="layui-form-label">验证码</label>
                  <div class="layui-input-inline">
                    <input
                      type="text"
                      name="验证码"
                      v-model="code"
                      class="layui-input"
                    />
                  </div>
                  <div
                    class="layui-form-mid svg"
                    v-html="captcha"
                    @click="getCaptcha"
                  ></div>
                  <div class="error">{{ errors[0] }}</div>
                </validation-provider>
              </div>
              <button class="layui-btn" :class="{ 'layui-btn-disabled': invalid }">
                点击登录
              </button>
              <!-- <button class="layui-btn" type="reset">重置</button> -->
              <a href="javascript:void(0)" class="forget-pwd-link">忘记密码</a>
            </form>
          </validation-observer>
        </div>
      </div>
    </template>
    <script>
    import axios from 'axios'
    export default {
      name: 'app',
      data () {
        return {
          captcha: '', // 验证码
          name: '',
          pwd: '',
          code: '',
          errorMsg: [],
          invalid: false
        }
      },
      mounted () {
        this.getCaptcha()
      },
      methods: {
        onSubmit () {
          this.$refs.form.validate().then(valid => {
            if (!valid) {
              return
            }
    
            this.name = ''
            this.pwd = ''
            this.code = ''
            this.$nextTick(() => {
              this.$refs.form.reset()
            })
          })
        },
        getCaptcha () {
          axios.get('http://localhost:3000/getCaptcha').then(res => {
            if (res.status === 200) {
              if (res.data.code === 200) {
                this.captcha = res.data.data.svg
              }
            }
          })
        }
      }
    }
    </script>
    <style lang="scss" scoped>
    #app {
      background-color: #f2f2f2;
    }
    .layui-container {
      background-color: #fff;
    }
    input {
       190px;
    }
    .forget-pwd-link {
      margin-left: 10px;
      &:hover {
        color: #009688;
      }
    }
    .svg {
      position: relative;
      top: -15px;
    }
    </style>
    View Code
  • 相关阅读:
    C# Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
    C# Collection was modified;enumeration operation may not execute
    C# 写文件
    AJAX 入门教程
    ABP 软删除ISoftDelete
    C# 随机列表
    C# ConfigurationManager 类的使用
    mui 关闭当前窗口
    C# 委托
    VSTO:使用C#开发Excel、Word【13】
  • 原文地址:https://www.cnblogs.com/sonwrain/p/14802915.html
Copyright © 2011-2022 走看看