web前端-Vue动态显示隐藏表单el-form-item

本文介绍如何在Vue组件中使用v-model绑定数据并结合v-if控制,实现表单项的动态展示。通过实例展示了如何根据上一表单项的值来决定类别选择框的显示或隐藏。

给每项表单项添加一个自己的id名,并用v-model绑定相对应的数据,利用v-if根据上一个表单项的数据值来进行显示或隐藏

        <!-- 类别展示隐藏 -->
        <el-form-item id="classShowOrHide" v-model="showClass" v-if="showClass==true" label="类别类型" prop="classType">
             <el-select v-model="form.classType" clearable style="width:380px" placeholder="请选择">
                 <el-option
                     v-for="dict in classList"
                     :key="dict.dictValue"
                     :label="dict.dictLabel"
                     :value="dict.dictValue"
                 ></el-option>
             </el-select>
        </el-form-item>

定义是否展示表单的变量;根据v-model绑定是否展示隐藏

export default {
  name: "Class",
  components: {
  },
  data() {
    return {
      // 类别是否展示
      showClass: true,
   }
},


methods: {
    //显示类别
    openClass() {
        //是否展示班次类型;开班展示,结束隐藏
        this.showClass = true;
    }
}
在使用 Element Plus 开发表单时,动态控制 `form-item` 的显示或隐藏是一个常见的需求,尤其适用于根据用户交互行为来切换某些字段的可见性。可以通过以下几种方式实现: ### 1. 使用 `v-if` 控制表单项渲染 通过绑定一个布尔值到 `v-if` 指令上,可以动态决定某个 `el-form-item` 是否渲染到 DOM 中。 ```vue <template> <el-form :model="form" label-width="120px"> <el-form-item label="是否显示额外信息" prop="showExtra"> <el-switch v-model="form.showExtra" /> </el-form-item> <el-form-item label="额外信息" prop="extraInfo" v-if="form.showExtra"> <el-input v-model="form.extraInfo" /> </el-form-item> </el-form> </template> <script setup> import { reactive } from 'vue'; const form = reactive({ showExtra: false, extraInfo: '' }); </script> ``` 该方法的优势在于完全从 DOM 层面移除或添加元素,适合对性能要求较高、且需要频繁切换的场景[^2]。 --- ### 2. 使用 `v-show` 控制表单可见性 与 `v-if` 同的是,`v-show` 是通过 CSS 的 `display` 属性来控制元素的显示与隐藏会销毁和重建组件。 ```vue <template> <el-form :model="form" label-width="120px"> <el-form-item label="是否显示额外信息" prop="showExtra"> <el-switch v-model="form.showExtra" /> </el-form-item> <el-form-item label="额外信息" prop="extraInfo" v-show="form.showExtra"> <el-input v-model="form.extraInfo" /> </el-form-item> </el-form> </template> <script setup> import { reactive } from 'vue'; const form = reactive({ showExtra: false, extraInfo: '' }); </script> ``` 这种方式适合需要频繁切换可见性的场景,因为组件状态会被保留,切换更流畅。 --- ### 3. 动态修改表单项规则(结合 `el-form` 的校验) 如果希望隐藏某个表单项的同时跳过其校验逻辑,可以在隐藏条件满足时动态修改 `el-form` 的验证规则。 ```vue <template> <el-form ref="formRef" :model="form" :rules="rules" label-width="120px"> <el-form-item label="是否显示额外信息" prop="showExtra"> <el-switch v-model="form.showExtra" @change="toggleExtraField" /> </el-form-item> <el-form-item label="额外信息" prop="extraInfo" :style="{ display: form.showExtra ? 'block' : 'none' }"> <el-input v-model="form.extraInfo" /> </el-form-item> </el-form> </template> <script setup> import { reactive, ref } from 'vue'; const form = reactive({ showExtra: false, extraInfo: '' }); const rules = reactive({ extraInfo: [ { required: false, message: '请输入额外信息', trigger: 'blur' } ] }); const toggleExtraField = (value) => { rules.extraInfo[0].required = value; }; const formRef = ref(); </script> ``` 这种方法适用于需要根据业务逻辑动态调整表单验证规则的情况。 --- ### 4. 封装为可复用组件(推荐) 对于复杂的表单结构,建议将动态显示/隐藏的逻辑封装成自定义组件,提升代码复用性和可维护性。例如可以参考引用中的 TForm 组件设计思路,通过传递配置对象动态控制字段展示[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值