给el-form-item,添加key的场景

v-if控制dom显示隐藏,dom的校验提示语还会显示,导致校验异常

1.公用同一个表单;

2.选择不同的账号类型,下面对应的表单项不同,但存在公用同一个字段的情况;

3.在切换另一个账号类型,点击确认,校验内容具有文字提示;

4.在账号对应input中输入内容,仍提示请输入账号字样;没走到校验里面(拿不到输入的内容);

 

原因

v-if在操作dom的时候,在根节点进行的删减,而element在封装的时候没考虑这块,导致rules判断的时候,无法取到v-if添加进来的prop值;

解决方法

在 el-form-item 中添加一个属性key,key的值是唯一的(一般key和prop写一样的内容即可,因为rules里面的东西不能重复定义,所以肯定是唯一的。)

简单赘述

         <el-form-item
            prop="accountName"
            key="accountName"
            label="账号"
            :rules="[
              { required: true, message: '请输入账号', trigger: 'blur' },
              { trigger: 'blur', validator: validateAccount },
            ]"
          >
            <el-input
              v-model.trim="CurObject.accountName"
              placeholder="请输入账号"
              name="accountName"
              type="text"
              tabindex="1"
              autocomplete="on"
              clearable
            />
          </el-form-item>

另外需要注意的是,在切换账号类型的时候(建议使用watch事件);

1.先将表单对应的字段值,进行置空(存在字段公用的情况,避免值,缓存);

2.调用表单提供的 this.$forceUpdate();

3. this.resetForm('ruleForm'),清除上一次的校验;

在 Vue 中,使用 Element UI 的 `el-form` 和 `el-form-item` 组件处理数据列表中的循环是很常见的需求。当你需要对每个列表项都创建一个表单字段时,你可以这样做: 1. 首先,定义一个数组来存储你的数据,每个数据项包含一个 `formItem` 数组,这个数组中包含了你需要的属性,比如 `label`、`prop`、`rules` 等。 ```js data() { return { items: [ { name: 'Item 1', formItems: [ { label: 'Field 1', prop: 'field1', rules: [{ required: true, message: '此项必填' }] }, { label: 'Field 2', prop: 'field2', rules: [{ type: 'integer', message: '请输入整数' }] } ] }, ... // 添加更多项 ] }; } ``` 2. 在模板中,你可以使用 `v-for` 来遍历 `items` 数组,并嵌套另一个 `v-for` 来遍历每个 `formItems` 数组: ```html <el-form :model="items" ref="form"> <template v-for="(item, index) in items"> <div> <h3>{{ item.name }}</h3> <el-form v-for="(formItem, formIndex) in item.formItems" :key="formIndex" :label="formItem.label" :prop="formItem.prop"> <el-form-item :rules="formItem.rules"> <el-input v-model="item[formItem.prop]"></el-input> </el-form-item> </el-form> </div> </template> </el-form> ``` 3. 对于动态添加的表单规则,你可以在提交表单前进行验证,例如在 `beforeSubmit` 或 `validate` 方法中检查所有子表单是否都满足规则。 ```js methods: { validateForm() { this.$refs.form.validate((valid) => { if (valid) { // 提交数据或执行其他操作 } else { console.log('表单验证失败'); } }); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值