vue+element实现表单校验功能

下面是“vue+element实现表单校验功能”的完整攻略。

一、需求

在前端开发中,表单校验是一项常见的需求。我们需要实现以下功能:

  1. 用户填写表单时,对表单数据进行即时校验,及时提示用户。
  2. 当用户提交表单数据时,对数据再次校验,确保数据填写正确后才提交。

为了实现上述两个功能,我们可以选择使用Vue框架和Element组件库提供的表单组件及表单校验功能。下面我们来一步一步实现。

二、搭建基础环境

首先,我们需要确保我们安装了Vue框架及Element组件库。如果没有安装,可以使用以下命令行进行安装:

# 安装Vue框架
npm install vue

# 安装Element组件库
npm install element-ui

三、创建基础表单,并进行基础校验

接下来,我们开始创建表单。这里将以登录表单为例,创建一个简单的登录表单。

<template>
  <el-form ref="loginForm" :model="loginForm" :rules="loginFormRules" label-width="80px">
    <el-form-item label="用户名" prop="username">
      <el-input v-model="loginForm.username"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input type="password" v-model="loginForm.password"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">登录</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data() {
      return {
        loginForm: {
          username: '',
          password: ''
        },
        loginFormRules: {
          username: [
            { required: true, message: '请输入用户名', trigger: 'blur' }
          ],
          password: [
            { required: true, message: '请输入密码', trigger: 'blur' },
            { min: 6, max: 20, message: '密码长度在6到20个字符之间', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm() {
        this.$refs.loginForm.validate(valid => {
          if (valid) {
            alert('校验通过');
          } else {
            alert('表单校验失败');
            return false;
          }
        });
      }
    }
  };
</script>

上述代码创建了一个登录表单,包含用户名、密码两个输入框,以及一个登录按钮。我们使用ref属性将表单组件绑定到实例上,同时使用:model:rules属性将表单数据和表单校验规则绑定到表单组件上。

现在我们可以在浏览器中看到一个基础的表单,我们可以输入用户名和密码,并点击登录按钮进行校验。但这个表单只实现了最基础的校验功能,仅在输入框失去焦点时进行校验,而没有及时提示用户错误信息。下面我们继续完善表单校验功能。

四、实现即时校验

我们的需求中要求对输入框进行即时校验,因此我们需要在用户输入时对表单数据进行校验并及时提示用户错误信息。这里我们使用Vue提供的计算属性实现该功能。代码如下:

<template>
  <el-form ref="loginForm" :model="loginForm" :rules="loginFormRules" label-width="80px">
    <el-form-item label="用户名" prop="username" :error="loginFormErrors.username">
      <el-input v-model="loginForm.username" @input="validateInput('username')"></el-input>
      <div v-if="loginFormErrors.username" style="color: red">{{ loginFormErrors.username }}</div>
    </el-form-item>
    <el-form-item label="密码" prop="password" :error="loginFormErrors.password">
      <el-input type="password" v-model="loginForm.password" @input="validateInput('password')"></el-input>
      <div v-if="loginFormErrors.password" style="color: red">{{ loginFormErrors.password }}</div>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">登录</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data() {
      return {
        loginForm: {
          username: '',
          password: ''
        },
        loginFormRules: {
          username: [
            { required: true, message: '请输入用户名', trigger: 'blur' }
          ],
          password: [
            { required: true, message: '请输入密码', trigger: 'blur' },
            { min: 6, max: 20, message: '密码长度在6到20个字符之间', trigger: 'blur' }
          ]
        },
        loginFormErrors: {}
      };
    },
    methods: {
      submitForm() {
        this.$refs.loginForm.validate(valid => {
          if (valid) {
            alert('校验通过');
          } else {
            alert('表单校验失败');
            return false;
          }
        });
      },
      validateInput(key) {
        this.$refs.loginForm.validateField(key, () => {
          this.loginFormErrors[key] = '';
        });
      }
    }
  };
</script>

我们新增了一个计算属性loginFormErrors,用于保存每个输入框相应的错误信息。我们在输入框上绑定了@input事件,在用户输入时调用validateInput()方法,以便在用户输入时进行实时校验。validateInput()方法使用validateField()方法对该输入框的数据进行校验,并将错误信息保存到loginFormErrors中,以便前端及时在页面上显示错误信息。

五、自定义校验规则

在前面的示例中,我们使用了Element组件库提供的校验规则。但是有时候我们可能需要自定义一些校验规则。那么,我们该如何自定义校验规则呢?其实很简单,只需在loginFormRules中添加一条相应的规则即可。以下是一个示例:

<template>
  <el-form ref="loginForm" :model="loginForm" :rules="loginFormRules" label-width="80px">
    <el-form-item label="手机号" prop="mobile">
      <el-input v-model="loginForm.mobile"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">登录</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data() {
      return {
        loginForm: {
          mobile: ''
        },
        loginFormRules: {
          mobile: [
            { required: true, message: '请输入手机号', trigger: 'blur' },
            {
              validator: (rule, value, callback) => {
                if (!(/^1[3456789]\d{9}$/.test(value))) {
                  callback(new Error('请输入正确的手机号'));
                } else {
                  callback();
                }
              },
              trigger: 'blur'
            }
          ]
        }
      };
    },
    methods: {
      submitForm() {
        this.$refs.loginForm.validate(valid => {
          if (valid) {
            alert('校验通过');
          } else {
            alert('表单校验失败');
            return false;
          }
        });
      }
    }
  };
</script>

在以上示例中,我们添加了一个自定义手机号校验规则,并将该规则添加到loginFormRules中。在该规则中,我们使用了正则表达式进行手机号的判断,如果不符合规定,则调用callback()方法并返回错误信息。

六、总结

以上就是“vue+element实现表单校验功能”的完整攻略。我们在具体实现过程中,先是创建了基础表单,并进行了基础校验;然后,我们使用Vue提供的计算属性实现了表单的即时校验;最后,我们通过示例,向大家详细介绍了自定义校验规则的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue+element实现表单校验功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript json object 与string 相互转换的简单实现

    下面详细讲解一下”Javascript JSON Object与String相互转换的简单实现”的攻略。 什么是JSON? JSON全称为JavaScript Object Notation,是现在比较流行的一种轻量级的数据交换格式。它使用完全独立于编程语言的文本格式来表示数据。我们可以通过JavaScript中的JSON对象来解析JSON数据,并进行序列化…

    JavaScript 2023年5月27日
    00
  • 详解JS函数stack size计算方法

    详解JS函数stack size计算方法 栈大小及其作用 在JS中,每当函数调用时,就会创建一个称为“栈帧”的数据结构,用于存储调用状态和参数等信息。栈帧是一种后进先出的数据结构,用于保存函数调用链的关系。栈帧的大小取决于函数中使用的变量数量和它们的类型。 当一个函数被调用时,它会在当前栈顶位置创建一个新的栈帧。当函数返回时,栈帧会被弹出,将控制权返回给调用…

    JavaScript 2023年6月11日
    00
  • JS获取并操作iframe中元素的方法

    JS获取并操作iframe中元素的方法可以分为以下几个步骤: 通过document.getElementById()获取iframe元素的引用。例如,若iframe元素的id为“myFrame”,则用下列代码获取它的引用: var myFrame = document.getElementById(‘myFrame’); 使用contentWindow属性获…

    JavaScript 2023年6月10日
    00
  • JS如何对Iframe内外页面进行操作总结

    下面是JS如何对Iframe内外页面进行操作总结的完整攻略: 1. 通过window.parent获取父级页面对象并进行操作 window.parent用于获取当前iframe的父级页面对象,通过它可以调用父级页面的函数或属性进行操作。以下是一个示例进行说明: <!– 父级页面index.html –> <!DOCTYPE html&g…

    JavaScript 2023年6月11日
    00
  • js中通过getElementsByName访问name集合对象的方法

    获取name集合对象是DOM中的常见操作之一,使用getElementsByName方法可以获取到相应名字的元素节点集合。下面为大家提供选定属性值的两条示例说明: 语法说明 getElementsByName方法通过指定元素的name特定属性来获取文档中具有相同name属性值的元素集合。其基本语法如下: var elements = document.get…

    JavaScript 2023年6月10日
    00
  • JavaScript中各种二进制对象关系的深入讲解

    JavaScript中各种二进制对象关系的深入讲解 Buffer 在 Node.js 中,Buffer 类被用来在 TCP 流、文件系统操作、以及其他上下文中处理二进制数据流。 创建 Buffer Buffer 可以通过多种方式创建,在以下的代码片段中,我们来看如何创建一个空的 Buffer 对象。 const buf1 = Buffer.alloc(5);…

    JavaScript 2023年5月27日
    00
  • JS JSOP跨域请求实例详解

    JS JSOP跨域请求实例详解 什么是跨域请求? 跨域请求是指在一个来源(即域名、端口、协议都相同)的网页中,不能发起对另一个来源的网页的请求。这是由浏览器的同源策略所限制的。 当在一个网页中通过 AJAX、Fetch、WebSocket 等方式向另一个域名(或主机名、端口号、协议)发起请求时,由于安全原因,浏览器会拦截这些请求,而这种被拒绝的请求就称为“跨…

    JavaScript 2023年5月27日
    00
  • js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍

    JS鼠标点击事件在各个浏览器中的写法及Event对象属性介绍 鼠标点击事件是Web开发中使用最频繁的交互功能之一,其中又以JavaScript作为事件的绑定和处理工具最为常见。本文将介绍js鼠标点击事件在各个浏览器中的写法以及Event对象属性介绍。 鼠标点击事件写法介绍 基础事件绑定及处理函数 首先,我们需要了解在各个浏览器中的鼠标点击事件绑定函数,其中a…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部