vue3的Element Plus 表单校验(表单可手动按钮增、删)-- vue2的Element-ui原理一样

下面是关键代码(根据具体业务逻辑修改):

<template>
  <div>
    <el-form :model="orderNumber" label-width="9rem">
      <!-- 可自动添加数据检验表单 -->
      <template
        v-for="(item, index) in orderNumber.orderList"
        :key="index + Math.random()"
      >
        <el-form-item
          :prop="'orderList.' + index + '.orderValue'"
          :rules="[
            {
              required: false,
              message: '请输入订单号',
              trigger: 'blur',
            },
            {
              validator: validatePrice,
              trigger: 'blur',
            },
          ]"
          label="输入订单号"
        >
          <div style="display: flex">
            <!-- $forceUpdate() //强制更新输入框,组件内置函数 -->
            <el-input @input="$forceUpdate()" v-model="item.orderValue" />
            <!-- 显示删除按钮 -->
            <div
              v-if="orderNumber.orderList.length > 1"
              class="pay_order_cancel"
              @click="cancelOrder(index)"
            >
              <i class="iconfont icon-shanchu"></i>
            </div>
          </div>
        </el-form-item>
      </template>
    </el-form>
    <!-- 限制表单最多展示三个 -->
    <div
      v-if="orderNumber.orderList.length < 3"
      class="pay_order_add_buttom"
      @click="addOrder"
    >
      <i class="iconfont icon-tianjia" style="margin-right: 1rem"></i>新增订单号
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted, computed } from "vue";
const validatePrice = (rule, value, callback) => {
  // 订单号输入框规则校验
  if (!value) return callback(new Error("请输入订单号"));
  return callback();
};

//订单号数据
const orderNumber = reactive({
  orderList: [{ orderValue: "" }],
});

const addOrder = () => {
  // 添加订单
  // console.log(orderNumber.orderList);
  orderNumber.orderList.push({ orderValue: "" });
};

const cancelOrder = (index) => {
  // 删除订单
  orderNumber.orderList.splice(index, 1);
};
</script>
<style scoped></style>

下面解释主要的踩坑点:

<template
    v-for="(item, index) in orderNumber.orderList"
    :key="index + Math.random()"
 >
<el-form-item
          :prop="'orderList.' + index + '.orderValue'"
          :rules="[
            {
              required: false,
              message: '请输入订单号',
              trigger: 'blur',
            },
            {
              validator: validatePrice,
              trigger: 'blur',
            },
          ]"
          label="输入订单号"
        >

       <el-input @input="$forceUpdate()" v-model="item.orderValue" />

   </el-form-item>
</template>

解释:

(1)要使用的扩展列表要用<template>包含 , v-for的key需要自增保持唯一,这里使用了随机数Math.random()使key值唯一

(2):prop="'orderList.' + index + '.orderValue'" 的内容,

orderList是数组的名字

index是v-for的 index 序列号,

orderValue是输入框的检验变量 ,注意:一定要和验证字段的参数名字严格对应,比如,上面例子和输入框<el-input @input="$forceUpdate()" v-model="item.orderValue" /> 中的v-model值orderValue严格对应

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3 Element Plus是一套基于Vue3的UI组件库提供了丰富的组件和功能,其中包括了Form表单组件。在Element Plus中,可以通过动态校验来实现同一字段的表单动态校验。 在Vue3 Element Plus中,可以使用`el-form`组件来创建表单,通过`el-form-item`组件来包裹表单项。要实现同一字段的表单动态校验,可以使用`rules`属性来定义校验规则。 首先,需要在Vue组件中定义表单数据和校验规则。例如: ```javascript data() { return { form: { field1: '', field2: '' }, rules: { field1: [ { required: true, message: '字段1不能为空', trigger: 'blur' }, // 其他校验规则 ], field2: [ { required: true, message: '字段2不能为空', trigger: 'blur' }, // 其他校验规则 ] } } } ``` 然后,在模板中使用`el-form`和`el-form-item`组件来创建表单,并绑定数据和校验规则。例如: ```html <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="字段1" prop="field1"> <el-input v-model="form.field1"></el-input> </el-form-item> <el-form-item label="字段2" prop="field2"> <el-input v-model="form.field2"></el-input> </el-form-item> </el-form> </template> ``` 最后,可以通过调用`validate`方法来触发表单校验。例如: ```javascript methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 校验通过,提交表单 } else { // 校验不通过,处理错误信息 } }); } } ``` 这样,就可以实现同一字段的表单动态校验了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值