vue3中动态添加form表单校验

<template>
  <div>
    <div v-for="(formData, index) in forms" :key="index">
      <u-form :model="formData" :rules="rules" ref="formRefs">
        <u-form-item label="用户名" prop="username">
          <u-input v-model="formData.username"></u-input>
        </u-form-item>
        <u-form-item label="密码" prop="password">
          <u-input type="password" v-model="formData.password"></u-input>
        </u-form-item>
      </u-form>
    </div>
    <u-button @click="submitForm()">提交</u-button>
  </div>
</template>

<script setup>
import { reactive, ref } from "vue";

const forms = reactive([
  { username: "", password: "" },
  { username: "", password: "" },
  // 可以根据需要添加更多的表单数据
]);

const formRefs = ref([]);

const rules = {
  username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
  password: [{ required: true, message: "请输入密码", trigger: "blur" }],
};

const submitForm = () => {
  if (formRefs.value?.length) {
    Promise.all(formRefs.value?.map((ref) => ref.validate()))
      .then((results) => {
        console.log("验证结果", results);
        if (results.some((res) => !res)) {
          uni.$u.toast("请正确填写必填项!");
        } else {
          console.log("校验通过")
        }
      })
      .catch((errors) => {
        uni.$u.toast("请正确填写必填项!");
      });
  }
};
</script>

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤实现vue3 element form动态添加删除和校验: 1. 创建一个数组来存储项的数据,例如: ``` data() { return { formItems: [ { label: '姓名', prop: 'name', value: '', rules: [{ required: true, message: '请输入姓名' }] }, { label: '年龄', prop: 'age', value: '', rules: [{ required: true, message: '请输入年龄' }, { type: 'number', message: '年龄必须为数字' }] } ] } } ``` 2. 在模板使用`el-form`和`el-form-item`标签来渲染,例如: ``` <el-form :model="formData" :rules="formRules" ref="form"> <el-form-item v-for="(item, index) in formItems" :key="index" :label="item.label" :prop="item.prop"> <el-input v-model="item.value"></el-input> <el-button type="danger" size="small" icon="el-icon-close" @click="removeFormItem(index)" v-if="formItems.length > 1"></el-button> </el-form-item> <el-button type="primary" @click="addFormItem">添加项</el-button> <el-button type="primary" @click="submitForm">提交</el-button> </el-form> ``` 3. 在方法实现添加和删除项的功能,例如: ``` methods: { addFormItem() { this.formItems.push({ label: '新项', prop: 'new_prop', value: '', rules: [{ required: true, message: '请输入新项' }] }) }, removeFormItem(index) { this.formItems.splice(index, 1) }, submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 校验通过,提交数据 } else { // 校验不通过 } }) } } ``` 4. 在校验规则使用动态绑定的方式,例如: ``` data() { return { formRules: {} } }, watch: { formItems: { handler(newValue) { this.formRules = {} newValue.forEach(item => { this.$set(this.formRules, item.prop, item.rules) }) }, deep: true } } ``` 这样就可以实现vue3 element form动态添加删除和校验了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值