若依框架 在el-dialog弹窗中增加el-tabs标签

在el-dialog弹窗中要加入过多的内容时可以在弹窗中加入标签页

<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  <el-form ref="form" :model="form" :rules="rules" label-width="100px">
    <el-tabs v-model="activeName" @tab-click="">
      <el-tab-pane label="标签1" name="first" style="padding-left: 16px;">
          <el-col :span="12">
            <el-form-item label="名字" prop="Name">
              <el-input v-model="form.fileName" placeholder="请输入名字" />
            </el-form-item>
            <el-form-item label="年龄" prop="age">
              <el-input v-model="form.fileNo" placeholder="请输入年龄" />
            </el-form-item>
          </el-col>
      </el-tab-pane>
      <el-tab-pane label="标签2" name="second" style="padding-left: 16px;">
        <el-table
          :data=data
          @selection-change=""
          ref="singleSelectTable">
          <el-table-column property="itemName" label="名称" ></el-table-column>
          <el-table-column property="methodName2" label="方法1" ></el-table-column>
          <el-table-column property="methodName2" label="方法2" ></el-table-column>
        </el-table>
      </el-tab-pane>
    </el-tabs>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button type="primary" @click="submitForm">确 定</el-button>
    <el-button @click="cancel">取 消</el-button>
  </div>
</el-dialog>

关于el-tabs注意的点直接看官方文档:

Element - The world's most popular Vue UI framework

效果图

在使用 `el-dialog` 弹窗时,若嵌套了 `el-tabs` 或其他复杂组件(如 `el-transfer`),可能会导致关闭弹窗时页面卡死。该问题通常与 Vue 组件的销毁机制和 `el-dialog` 的 `destroy-on-close` 属性有关。 ### 问题分析 当 `el-dialog` 设置了 `destroy-on-close` 属性时,每次关闭弹窗都会销毁其内部的子组件。如果其中嵌套了 `el-tabs` 等组件,在销毁过程中可能触发某些资源释放异常或内存泄漏问题,最终导致浏览器卡死[^1]。 此外,若弹窗中包含表单数据绑定(如 `el-form`)且未正确重置状态,也可能在多次打开/关闭后造成组件渲染异常,影响性能甚至导致页面无响应[^2]。 ### 解决方案 #### 方案一:移除 `destroy-on-close` 属性 最直接的方式是取消 `el-dialog` 的 `destroy-on-close` 属性,避免每次关闭时销毁组件,从而防止因组件销毁引发的卡顿问题。 ```html <el-dialog title="提示" :visible.sync="dialogVisible" width="30%"> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane> <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane> <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane> <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane> </el-tabs> </el-dialog> ``` #### 方案二:使用 `v-if` 控制 `el-tabs` 的渲染 通过 `v-if` 控制 `el-tabs` 的条件渲染,可以在关闭弹窗时手动控制其销毁时机,避免冲突。 ```html <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :destroy-on-close="true"> <el-tabs v-model="activeName" @tab-click="handleClick" v-if="dialogVisible"> <el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane> <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane> <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane> <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane> </el-tabs> </el-dialog> ``` #### 方案三:强制重建 `el-form` 并清空状态 若弹窗中包含表单内容,可通过设置 `key` 属性来控制组件重建,并在每次打开时重置表单数据,确保状态干净[^2]。 ```html <el-dialog :title="title" :visible.sync="dialog1" width="480px" append-to-body @open="handleOpen"> <el-form :model="refuseForm" ref="refuseForm" :rules="rules" label-width="110px" :key="formKey"> <!-- 表单项 --> </el-form> </el-dialog> ``` ```javascript data() { return { formKey: 0, dialog1: false, refuseForm: { refuseReason: '' } }; }, methods: { handleOpen() { this.formKey++; // 每次打开弹窗,改变 key,强制 el-form 重建 this.refuseForm.refuseReason = ''; // 可选:手动清空数据 } } ``` #### 方案四:手动控制 `el-tabs` 的显示与隐藏 在某些情况下,可临时将 `el-tabs` 从 DOM 中移除以避免资源占用过高,尤其在跳转页面或频繁操作弹窗时有效。 ```html <el-tabs v-model="activeName" @tab-click="handleClick" v-if="bol"> <el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane> <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane> <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane> <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane> </el-tabs> ``` ```javascript methods: { closeHelp() { this.bol = false; this.$emit('update:newPeopleHelpDialogVisible', false); } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值