【element-plus 给form表单的对象数组添加prop属性】

博客主要讲述了在form表单中为对象数组添加prop属性,还给出参考官方文档链接“添加/删除表单项”,涉及前端开发相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

element-plus 给form表单的对象数组添加prop属性

对象数组 在form表单中添加 prop属性

//两种方式都可以添加prop 
<div v-for="(item ,index) in ruleForm.objArr" v-bind:key="index">
	<el-form-item 
		:label="'label' + index" 
		:prop="'objArr.'+index+'.a'"  //注意prop属性前一定要添加 : 冒号
	>
	  <el-input v-model="item.a" />  //这里写item.a也可以监听到了
	</el-form-item>
	
	<el-form-item 
		:label="'label' + index" 
		:prop="['objArr',index,'b']" //注意prop属性前一定要添加 : 冒号
	>
	  <el-input v-model="item.b" />
	</el-form-item>
</div>

<scriput setup>

// 测试表单对象
const ruleForm = reactive({
  objArr:[{
    a:1,
    b:2
  },{
    a:3,
    b:4
  },{
    a:5,
    b:6
  }],
})

</scriput >

参考官方文档链接: 添加/删除表单项

// 参考遍历dynamicValidateForm.domains数组
<template>
  <el-form
    ref="formRef"
    :model="dynamicValidateForm"
    label-width="120px"
    class="demo-dynamic"
  >
    <el-form-item
      prop="email"
      label="Email"
      :rules="[
        {
          required: true,
          message: 'Please input email address',
          trigger: 'blur',
        },
        {
          type: 'email',
          message: 'Please input correct email address',
          trigger: ['blur', 'change'],
        },
      ]"
    >
      <el-input v-model="dynamicValidateForm.email" />
    </el-form-item>
    <el-form-item
      v-for="(domain, index) in dynamicValidateForm.domains"  
      :key="domain.key"
      :label="'Domain' + index"
      :prop="'domains.' + index + '.value'"  //注意prop属性前一定要添加 : 冒号
      :rules="{
        required: true,
        message: 'domain can not be null',
        trigger: 'blur',
      }"
    >
      <el-input v-model="domain.value" />
      <el-button class="mt-2" @click.prevent="removeDomain(domain)"
        >Delete</el-button
      >
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm(formRef)">Submit</el-button>
      <el-button @click="addDomain">New domain</el-button>
      <el-button @click="resetForm(formRef)">Reset</el-button>
    </el-form-item>
  </el-form>
</template>

<script lang="ts" setup>
import { reactive, ref } from 'vue'
import type { FormInstance } from 'element-plus'

const formRef = ref<FormInstance>()
const dynamicValidateForm = reactive<{
  domains: DomainItem[]
  email: string
}>({
  domains: [
    {
      key: 1,
      value: '',
    },
  ],
  email: '',
})

interface DomainItem {
  key: number
  value: string
}

const removeDomain = (item: DomainItem) => {
  const index = dynamicValidateForm.domains.indexOf(item)
  if (index !== -1) {
    dynamicValidateForm.domains.splice(index, 1)
  }
}

const addDomain = () => {
  dynamicValidateForm.domains.push({
    key: Date.now(),
    value: '',
  })
}

const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.validate((valid) => {
    if (valid) {
      console.log('submit!')
    } else {
      console.log('error submit!')
      return false
    }
  })
}

const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}
</script>
### 使用 Element Plus 实现表单的部分字段校验 为了实现对特定字段的单独校验,在 `el-form` 中可以通过调用实例方法 `validateField` 来完成这一操作。此方法接收要验证的一个或多个字段名称作为参数,并执行相应的验证逻辑[^1]。 下面是一个具体的例子来说明如何仅针对某些字段触发校验: ```html <template> <div id="app"> <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleFormRef"> <!-- 姓名 --> <el-form-item label="姓名" prop="name"> <el-input v-model="ruleForm.name"></el-input> </el-form-item> <!-- 手机号 --> <el-form-item label="手机号码" prop="phone"> <el-input v-model="ruleForm.phone"></el-input> </el-form-item> <!-- 不参与即时校验的字段 --> <el-form-item label="地址" > <el-input v-model="ruleForm.address"></el-input> </el-form-item> <el-button type="primary" @click="submitForm(&#39;name&#39;)">只检验姓名</el-button> <el-button type="success" @click="submitForm([&#39;name&#39;, &#39;phone&#39;])">检验姓名和电话</el-button> </el-form> </div> </template> <script setup lang="ts"> import { reactive, ref } from &#39;vue&#39; import type { ElForm } from &#39;element-plus&#39; interface RuleForm { name: string; phone: string; address?: string; } const ruleFormRef = ref<InstanceType<typeof ElForm>>() const ruleForm: RuleForm = reactive({ name: &#39;&#39;, phone: &#39;&#39; }) // 定义规则 const rules = reactive({ name: [ { required: true, message: &#39;请输入您的名字&#39;, trigger: &#39;blur&#39; } ], phone: [ { required: true, message: &#39;请输入有效的手机号码&#39;, trigger: &#39;change&#39; }, { pattern: /^1\d{10}$/, message: &#39;手机号格式错误&#39;} ] }) function submitForm(fields:string | string[]) { if (!ruleFormRef.value) return; ruleFormRef.value.validateField( fields, (invalidFields) => { console.log(invalidFields ? "有未通过项": "全部通过"); }) } </script> ``` 在这个案例里,点击不同的按钮可以选择性地对不同组合的字段进行校验。对于不需要立即校验的字段(比如这里的“地址”),则不必为其配置 `prop` 属性及其对应的验证规则[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值