vue3.x + elementui-plus实现v-for动态循环生成ref后进行表单验证

该文章演示了如何在Vue3.x项目中结合ElementUI-Plus,使用v-for动态循环生成表单,并进行表单验证。每个表单项通过ref进行管理,验证通过后执行提交操作。示例包含一个简单的名称输入框,可扩展至更多表单字段。
摘要由CSDN通过智能技术生成

vue3.x + elementui-plus实现v-for动态循环生成ref后进行表单验证

本例子是根据vue3.x 和elementui的 多form表单进行表单验证,验证通过后再进行提交操作,我这里只给出了最简单的表单,只有一个名称输入框,可根据自己需求进行扩展。

往期文章:vue3获取动态循环生成的ref

效果图:
在这里插入图片描述

  1. 在demo.vue的template里编写循环生成的from表单
<template>
 <el-form :model="item"  v-for="(item,index) in list" :ref="setItemRef"   :rules="rules" :label-width="'90px'">
     <el-form-item label="名称" prop="name">
          <el-input v-model="item.name"  />
      </el-form-item>
  </el-form>
</template>
  1. 采用vue3的setup语法糖
<script  setup>
    import {ref,reactive} from  'vue'
    import {ElMessage} from 'element-plus'
	//编写form表单验证规则
	 const rules = reactive({
        name: [
            {
                required: true,
                message: '名称不能为空',
                trigger: 'blur'
            },
        ]
    })
    //form内容
     const list = reactive([
        { name: ''},
        { name: ''},
    ])
    
     //定义ref数组
	 const refList = ref([]);
	 
 	 //赋值ref
    const setItemRef = el => { 
        if (el) {
            refList.value.push(el);
        }
    }
 	//获取ref并执行接下来操作
    const getRefData = ()=>{
        let flagList = [];
        for(let i =0; i < refList.value.length; i++){
            console.log(refList.value[i]); // refList.value[i].xxx   执行todo
            refList.value[i].validate((valid) => {
                console.log(valid);
                if (valid) {
                    console.log("验证成功");
                }else{
                    console.log("验证失败");
                }
                flagList.push(valid)
                console.log(flagList);
                if(i == refList.value.length -1){
                    submitForm();
                }
            })

        }

        function submitForm() {
        	//如果表单验证都通过
            let flag = flagList.every(item=> item == true);
            if(flag){
                console.log("成功提交操作");
            }else{
                console.log("失败提示");
            }
        }
    }
</script>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 中使用 Element Plus 进行表单验证可以按照以下步骤进行: 1. 安装 Element Plus 和 VeeValidate ``` npm install element-plus vee-validate@next ``` 2. 在 main.js 中引入 Element Plus 和 VeeValidate ```js import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import { defineRule, ErrorMessage, configure } from 'vee-validate' import { required, min, max, email } from '@vee-validate/rules' import App from './App.vue' const app = createApp(App) app.use(ElementPlus) // 注册 VeeValidate 规则 defineRule('required', required) defineRule('min', min) defineRule('max', max) defineRule('email', email) // 配置 VeeValidate configure({ generateMessage: ({ field, rule }) => { const messages = { required: `${field}不能为空`, min: `${field}至少为${rule.params.min}个字符`, max: `${field}不能超过${rule.params.max}个字符`, email: `${field}必须是有效的邮箱地址` } return messages[rule.name] || `${field}无效` } }) app.component('ErrorMessage', ErrorMessage) app.mount('#app') ``` 3. 在组件中使用 VeeValidate ```html <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> <error-message name="username"></error-message> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> <error-message name="password"></error-message> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> import { defineComponent } from 'vue' import { useVeeValidate } from '@vee-validate/vue3' export default defineComponent({ setup() { const { handleSubmit, resetForm, errors, setErrors } = useVeeValidate() const form = { username: '', password: '' } const rules = { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 6, max: 16, message: '用户名长度在 6 到 16 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 16, message: '密码长度在 6 到 16 个字符', trigger: 'blur' } ] } const submitForm = handleSubmit(async () => { // 提交表单逻辑 }) return { form, rules, submitForm, resetForm, errors, setErrors } } }) </script> ``` 在这个例子中,我们使用了 `useVeeValidate()` hook 来管理表单验证,定义了一个 `form` 对象来存储表单数据,定义了 `rules` 对象来定义表单验证规则,使用了 `handleSubmit()` 方法来触发表单提交逻辑,并且使用了 `ErrorMessage` 组件来展示错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值