前端开发之VeeValidate使用和实例

前言

本文讲解的veeValidate的使用并和elemntForm表单进行比较

组件简介

为了确保通过表单从用户那里收集正确类型的数据,有必要验证表单,以确保用户输入符合预期的模式。VeeValidate是一个可以将这一层功能添加到任何表单组件的包。

效果图

![在这里插入图片描述](https://img-blog.csdnimg.cn/f209eb4ad354463193804c852834dad4.png在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

vue中使用

使用中使用了elementFrom进行对比

1、安装组件

yarn add vee-validate

npm install vee-validate --save

2、 导入组件并注册

 import { Form, Field, ErrorMessage } from 'vee-validate'
 components: {
  Form,  //外层标签
  Field,	//表单标签
  ErrorMessage,	//将报错以特定的标签显示  as定义标签 name关联表单
},

3、.vue文件

<template>
  <div class="comprehensive-form-container">
    <el-row :gutter="20">
      <el-col
        :lg="{ span: 12, offset: 6 }"
        :md="{ span: 20, offset: 2 }"
        :sm="{ span: 20, offset: 2 }"
        :xl="{ span: 12, offset: 6 }"
        :xs="24"
      >
        <!-- 使用elementForm -->
        <el-form
          ref="form"
          class="demo-form"
          :label-position="labelPosition"
          label-width="100px"
          :model="form"
          :rules="rules"
        >
          <el-form-item label="活动名称" prop="name">
            <el-input v-model="form.name" />
          </el-form-item>
          <el-form-item label="活动区域" prop="region">
            <el-select v-model="form.region" placeholder="请选择活动区域">
              <el-option label="区域一" value="shanghai" />
              <el-option label="区域二" value="beijing" />
            </el-select>
          </el-form-item>
          <el-form-item label="活动时间" prop="date">
            <el-date-picker
              v-model="form.date"
              placeholder="选择日期时间"
              type="datetime"
            />
          </el-form-item>
          <el-form-item label="联系电话" prop="mobile">
            <el-input v-model="form.mobile" />
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="submitForm('form')">
              立即创建
            </el-button>
            <el-button @click="resetForm('form')">重置</el-button>
          </el-form-item>
        </el-form>
        <!-- 使用vee-validate -->
        <Form @submit="onSubmit">
          <Field
            label="联系电话"
            name="email"
            :rules="validateEmail"
            type="email"
          />
          <!-- 将报错以特定的标签显示  as定义标签 name关联表单 -->
          <ErrorMessage as="p" name="email" />
          <br />
          <button>提交</button>
        </Form>
      </el-col>
    </el-row>
  </div>
</template>

<script>
  import { Form, Field, ErrorMessage } from 'vee-validate'
  export default {
    name: 'Vee',
    components: {
      Form,
      Field,
      ErrorMessage,
    },
    data() {
      const generateData = () => {
        const data = []
        const cities = ['上海', '北京', '广州']
        const pinyin = ['shanghai', 'beijing', 'guangzhou']
        cities.forEach((city, index) => {
          data.push({
            label: city,
            key: index,
            pinyin: pinyin[index],
          })
        })
        return data
      }
      // 验证手机号的自定义规则
      var checkMoblie = (rule, value, cb) => {
        //验证手机号的正则表达式
        const regMobile = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
        if (regMobile.test(value)) {
          //合法的手机号
          return cb()
        }
        cb(new Error('请输入正确的手机号'))
      }
      return {
        labelPosition: 'right',
        form: {
          name: '',
          region: '',
          date: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          description: '',
          rate: 0,
          area: [],
          transfer: [],
          iphoneName: '',
        },
        rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            {
              min: 3,
              max: 5,
              message: '长度在 3 到 5 个字符',
              trigger: 'blur',
            },
          ],
          region: [
            { required: true, message: '请选择活动区域', trigger: 'change' },
          ],
          date: [
            {
              type: 'date',
              required: true,
              message: '请选择日期',
              trigger: 'change',
            },
          ],
          mobile: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { validator: checkMoblie, trigger: 'blur' },
          ],
        },
        data: generateData(),
        filterMethod(query, item) {
          return item.pinyin.indexOf(query) > -1
        },
      }
    },
    created() {
      this.fetchData()
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!')
          } else {
            // eslint-disable-next-line no-console
            console.log('error submit!!')
          }
        })
      },
      resetForm(formName) {
        this.$refs[formName].resetFields()
      },
      onSubmit(values) {
        console.log(values, null, 2)
      },
      validateEmail(value) {
        // if the field is empty
        if (!value) {
          return '填写的不能为空'
        }
        // if the field is not a valid email
        const regex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
        if (!regex.test(value)) {
          return '邮箱不符合规则'
        }
        // All is good
        return true
      },
    },
  }
</script>

<style lang="scss" scoped>
  .comprehensive-form-container {
    .demo-form {
      margin-top: 10px;
    }

    :deep() {
      .el-form-item__content {
        .el-rate {
          display: inline-block;
          font-size: 0;
          line-height: 1;
          vertical-align: middle;
        }

        .el-transfer__buttons {
          padding: 10px 10px 0 10px;
        }
      }
    }
  }
</style>

在这里插入图片描述

4、useField:组合 API 函数为字段定义验证规则

<template>
  <div>
    <input v-model="value" type="text" />
    <span>{{ errorMessage }}</span>
  </div>
</template>
<script>
import { useField } from 'vee-validate';
export default {
  setup() {
    function isRequired(value) {
      if (value && value.trim()) {
        return true;
      }
      return 'This is required';
    }
    const { errorMessage, value } = useField('fieldName', isRequired);
    return {
      errorMessage,
      value,
    };
  },
};
</script>

5、yup 是一个非常流行、简单且强大的 JavaScript 数据验证库,您可以将它与 vee-validate 结合使用,您可以使用它yup来定义该字段的验证规则:

<template>
  <div>
    <input v-model="value" type="text" />
    <span>{{ errorMessage }}</span>
  </div>
</template>
<script>
import { useField } from 'vee-validate';
import * as yup from 'yup';
export default {
  setup() {
    const { errorMessage, value } = useField('fieldName', yup.string().required().min(8));
    return {
      value,
      errorMessage,
    };
  },
};
</script>

6、useForm您可以通过传递一个validationSchema选项来使用该函数定义验证模式,而不是单独为每个字段提供验证,这可能会使您的代码变得混乱。

<template>
  <div>
    <input name="email" v-model="email" />
    <span>{{ emailError }}</span>
    <input name="password" v-model="password" type="password" />
    <span>{{ passwordError }}</span>
  </div>
</template>
<script>
import { useForm, useField } from 'vee-validate';
export default {
  setup() {
    // Define a validation schema
    const simpleSchema = {
      email(value) {
        // validate email value and return messages...
      },
      name(value) {
        // validate name value and return messages...
      },
    };
    // Create a form context with the validation schema
    useForm({
      validationSchema: simpleSchema,
    });
    // No need to define rules for fields
    const { value: email, errorMessage: emailError } = useField('email');
    const { value: password, errorMessage: passwordError } = useField('password');
    return {
      email,
      emailError,
      password,
      passwordError,
    };
  },
};
</script>

相关链接

VeeValidate官网链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VeeValidate是一个专用于Vue.js的验证库,在Vue项目中使用VeeValidate可以方便地进行表单验证。它提供了很多开箱即用的验证规则,并且还支持自定义验证规则。VeeValidate使用方式是基于模板的,类似于HTML5的验证API。 可以使用validate()方法来指定校验范围,可以是局部字段或全局字段;而validateAll()方法只能校验全局字段。这两个方法都可以在VeeValidate使用来进行表单校验。 使用VeeValidate需要先安装依赖,并在Vue项目中引入VeeValidate并进行配置。可以通过导入Vue和VeeValidate,然后使用Vue.use(VeeValidate)来安装VeeValidate。另外,还可以传入一个配置对象来进行参数的设置,比如设置验证错误信息的语言、错误信息的存储位置等等。 具体的参数介绍可以参考配置对象中的各个属性,比如aria、classNames、delay等等,这些参数可以根据实际需求进行调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue+VeeValidate 校验范围实例详解(部分校验,全部校验)](https://download.csdn.net/download/weixin_38670391/12950768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue 插件 vee-validate校验插件详解大全](https://blog.csdn.net/fd2025/article/details/124298824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值