ElementPlus通过v-for循环渲染的form表单校验

598 阅读1分钟

需求:

vue3+elementPlus项目中,有一个业务需求,表单有一个模块可以实现新增和删除,前端使用v-for渲染,要求v-for动态渲染的表单也能实现输入校验。

实现方法与代码:

方法:在循环的el-form-item项根据index动态添加prop属性和rules属性

<template>
  <div class="wrapper">
    <div class="title">商品链接</div>
    <el-form ref="applyFormRef" :model="applyForm" :rules="applyRules" label-position="top">
      <div class="authorize-checkbox">
        <template v-for="(item, index) in applyForm.orderLjItems" :key="index">
          <el-form-item label="商品链接" :prop="`orderLjItems.${index}.goodsLink`" :rules="applyRules.goodsLink">
            <el-input v-model="item.goodsLink" placeholder="输入该商品链接"></el-input>
          </el-form-item>
        </template>
      </div>
      <el-form-item label="填写理由" prop="reason">
        <el-input
          class="ipt-textarea"
          type="textarea"
          v-model="applyForm.reason"
          placeholder="输入理由"
          resize="none"
          maxlength="200"
          show-word-limit
        />
      </el-form-item>
    </el-form>
  </div>
</template>
<script lang="ts">
export default {
  name: 'lj-list'
}
</script>
<script lang="ts" setup>
import { ref, reactive } from 'vue'
import { FormInstance, FormRules } from 'element-plus'
import type { ApplyLjReq } from '~/types/order-list'

const applyFormRef = ref<FormInstance>()
const applyForm = ref<ApplyLjReq>({
  orderLjItems: [
    {
      goodsLink: ''
    }
  ],
  reason: ''
})
const applyRules = reactive<FormRules>({
  goodsLink: [{ required: true, message: '请输入该商品链接', trigger: 'blur' }],
  reason: [{ required: true, message: '请输入理由', trigger: 'blur' }]
})
</script>

官网实例:

image.png

链接: doc-archive.element-plus.org/#/zh-CN/com…