Vue2 项目里,使用 Element 的 dialog 里嵌套 tabs,同时使用destroy-on-close,导致关闭 dialog 时浏览器卡死问题

最近在老项目,Vue2 项目里,使用 Element 的 dialog 里嵌套 tabs,同时使用destroy-on-close,导致关闭 dialog 时浏览器卡死问题,问了度娘,说是ui和vue的版本不匹配,但老项目又不好都重新升级,然后其它什么在tabs外包一层el-row什么的也没用,最后问了chatgpt解决了,哈哈哈哈哈

/*这个问题可能是由于 Vue2 和 Element UI 的组件在销毁时出现了问题。当关闭 dialog 时,可能没有正确地销毁内部的 tabs 组件,导致浏览器卡死。为了解决这个问题,你可以尝试以下方法:
使用 v-if 而不是 v-show 控制 dialog 的显示和隐藏。这样可以确保在关闭 dialog 时,内部的 tabs 组件会被正确地销毁。
*/

html
Copy code
<el-dialog :visible.sync="dialogVisible" v-if="dialogVisible">
  <el-tabs>
    <!-- your tabs content -->
  </el-tabs>
</el-dialog>
<el-dialog :visible.sync="dialogVisible" v-if="dialogVisible">
  <el-tabs>
    <!-- your tabs content -->
  </el-tabs>
</el-dialog>

/*在关闭 dialog 时,手动销毁内部的 tabs 组件。你可以在 dialog 的 @close 事件中触发一个方法,然后在该方法中销毁 tabs 组件。*/

html
Copy code
<el-dialog :visible.sync="dialogVisible" @close="handleClose">
  <el-tabs ref="tabs">
    <!-- your tabs content -->
  </el-tabs>
</el-dialog>
<el-dialog :visible.sync="dialogVisible" @close="handleClose">
  <el-tabs ref="tabs">
    <!-- your tabs content -->
  </el-tabs>
</el-dialog>


javascript
Copy code
export default {
  data() {
    return {
      dialogVisible: false
    };
  },
  methods: {
    handleClose() {
      this.dialogVisible = false;
      this.$nextTick(() => {
        this.$refs.tabs.$destroy();
      });
    }
  }
};
export default {
  data() {
    return {
      dialogVisible: false
    };
  },
  methods: {
    handleClose() {
      this.dialogVisible = false;
      this.$nextTick(() => {
        this.$refs.tabs.$destroy();
      });
    }
  }
};

/*如果上述方法仍然无法解决问题,你可以尝试升级 Vue 和 Element UI 到最新版本,看看是否有相关的 bug 修复。
*/

以上是gpt的回答,我用了v-if="dialogVisible"就可以了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用elementUI的弹窗插件el-dialogdestroy-on-close属性的作用是在关闭弹窗是否销毁弹窗内的内容。根据引用\[1\]中的代码,设置destroy-on-close为true,每次关闭弹窗后,弹窗内的内容会被销毁,下次打开需要重新渲染。但是根据引用\[2\]的描述,有候设置destroy-on-close为true可能会无效,可能是因为该属性的使用方式不正确或者其他原因导致。在引用\[3\]中的代码示例中,el-dialog作为子组件使用,通过控制dialogVisible属性来控制弹窗的显示与隐藏,同可以通过设置dialogType属性来确定弹窗的类型。在关闭弹窗,可以通过调用handleClose方法来关闭弹窗并重置表单数据。 #### 引用[.reference_title] - *1* *3* [el-dialog 的各种正确使用姿势 以及 el-dialog destroy-on-close 无效的解决办法](https://blog.csdn.net/qq_21473443/article/details/127106152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue2+ElementUI el-form resetFields()方法重置无效,el-dialog destroy-on-close无效](https://blog.csdn.net/weixin_45701630/article/details/126704490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值