如何利用vue和Element-plus实现分步表单和表单校验

1. 前言

在前端开发中,表单是一个必不可少的部分。然而,在复杂的业务需求中,一个大型的表单可能有多个步骤,需要分步填写并进行校验,这时候分步表单和表单校验就成为了必要的功能。本篇文章将介绍如何使用Vue和Element-plus来实现分步表单和表单校验。

2. 功能展示

在开始介绍具体实现方法之前,我们先来看一下最终实现的效果。

下面是一个三步的分步表单,包含了一些常用的表单组件,比如单选框、多选框、下拉框、日期选择器等。每个步骤的表单都要进行校验,只有当所有表单都通过校验后,才能进行下一步操作。

3. 实现步骤

3.1 安装Element-plus

首先,我们需要安装Element-plus组件库。Element-plus是一个基于Vue 3.0的组件库,在Vue开发中广受欢迎。

// 安装Element-plus

npm install element-plus --save

3.2 创建分步表单组件

接下来,我们需要创建一个包含多个步骤的分步表单组件。我们可以使用Vue的动态组件来实现多步表单的切换。

下面是一个简单的分步表单组件的实现:

// StepperForm.vue

<template>

<div class="stepper-form">

<el-steps :active="activeStep" space="150px">

<el-step title="基本信息"></el-step>

<el-step title="联系方式"></el-step>

<el-step title="其他信息"></el-step>

</el-steps>

<component :is="currentStep"></component>

<div class="button-group">

<el-button @click="prevStep" :disabled="activeStep === 0">上一步</el-button>

<el-button @click="nextStep" :disabled="!validForm || activeStep === stepLength - 1">下一步</el-button>

</div>

</div>

</template>

<script>

import BasicInfoForm from './BasicInfoForm.vue'

import ContactForm from './ContactForm.vue'

import OtherForm from './OtherForm.vue'

export default {

name: 'StepperForm',

components: {

BasicInfoForm,

ContactForm,

OtherForm

},

data() {

return {

activeStep: 0, // 当前处于哪个步骤

stepLength: 3 // 总步骤数

}

},

computed: {

currentStep() {

switch (this.activeStep) {

case 0: return 'BasicInfoForm'

case 1: return 'ContactForm'

case 2: return 'OtherForm'

}

},

validForm() {

switch (this.activeStep) {

case 0: return this.$refs.basicInfoForm.validate()

case 1: return this.$refs.contactForm.validate()

case 2: return this.$refs.otherForm.validate()

}

}

},

methods: {

nextStep() {

if (this.validForm) {

this.activeStep += 1

}

},

prevStep() {

this.activeStep -= 1

}

}

}

这个组件包含了一个<el-steps>组件和多个表单组件。<el-steps>组件用来显示当前进行到哪个步骤,每个步骤对应一个表单组件。使用Vue的动态组件,我们可以根据不同的状态来动态渲染不同的表单。

<component :is="currentStep"></component>

<component>标签中的:is属性绑定的是当前表单组件的名字。我们通过currentStep计算属性来返回当前需要渲染的表单组件。

validForm计算属性用于判断当前步骤的表单是否通过校验。

3.3 实现表单组件

接下来,我们需要分别实现每个表单步骤对应的表单组件。以第一步的基本信息表单为例,实现方式如下:

// BasicInfoForm.vue

<template>

<el-form ref="basicInfoForm" :model="basicInfo" :rules="basicInfoRules">

<el-form-item label="姓名" prop="name">

<el-input v-model="basicInfo.name"></el-input>

</el-form-item>

<el-form-item label="性别" prop="gender">

<el-radio-group v-model="basicInfo.gender">

<el-radio label="男"></el-radio>

<el-radio label="女"></el-radio>

</el-radio-group>

</el-form-item>

<!-- 其他表单组件 -->

</el-form>

</template>

<script>

export default {

name: 'BasicInfoForm',

data() {

return {

basicInfo: {

name: '',

gender: ''

// 其他表单组件

},

basicInfoRules: {

name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],

gender: [{ required: true, message: '请选择性别', trigger: 'blur' }]

// 其他表单组件的校验规则

}

}

},

methods: {

validate() {

return new Promise((resolve, reject) => {

this.$refs.basicInfoForm.validate(valid => {

if (valid) {

resolve()

} else {

reject(new Error('表单填写不完整,请完善。'))

}

})

})

}

}

}

</script>

BasicInfoForm组件中包含一个<el-form>组件,里面包含了所有的表单组件。采用了双向绑定的方式将表单组件的值与basicInfo对象中对应的属性进行绑定。通过定义basicInfoRules对象中的验证规则,使用Element-plus提供的<el-form-item>组件来包裹表单项,可以方便地实现对表单项的校验。

validate方法用于验证表单是否填写完整并通过校验。它通过调用<el-form>组件的validate方法来实现。

3.4 最终实现效果

按照上述步骤实现后的分步表单组件的最终效果如下:

在每个步骤的表单上方有对应的步骤条,当前所处的步骤条会高亮显示,每个步骤都有对应的表单验证规则。当处于当前步骤时,点击“下一步”按钮会校验当前表单是否通过验证,只有通过验证才能进行下一步操作。除了基本信息表单步骤外,其他步骤的验证代码与这里类似,这里不再一一展示。

4. 总结

本篇文章介绍了如何使用Vue和Element-plus来实现多步骤分步表单和表单验证的功能。在实现过程中,我们使用了Vue的动态组件和Element-plus提供的<el-form>组件,以及相关的表单验证规则,通过不同的状态动态渲染不同的表单,并对每个表单进行了校验规则的制定和验证,实现了完美的多步骤表单功能。

如果需要深入了解Vue和Element-plus等前端开发相关技术,请参考相关文档。