vue中在使用keep-alive时,会出现在页面跳转后el-tooltip或el-dropdown不消失的问题以及解决方法

文章讲述了在Vue应用中,由于使用keep-alive进行页面缓存,导致tooltip和dropdown在页面切换后仍然显示的问题。提出了三种解决方案,包括在deactivated生命周期中销毁、路由守卫中移除或者在App.vue中监听路由切换。并以路由守卫为例提供了具体的实现代码。
摘要由CSDN通过智能技术生成

一、 问题复现

跳转前:

在这里插入图片描述
在这里插入图片描述
跳转后:
在这里插入图片描述
在这里插入图片描述

二、分析

由于在vue中使用了keep-alive,页面在切换时,上一个页面的实例被缓存了,跳转后并没有销毁,所以才会残留 tooltip或dropdown,所以有以下解决思路:
1、keep-alive会多出两个生命周期,我们可以在deactivated中销毁当前页面中所有的tooltip或dropdown;
2、在路由守卫中,在页面跳转时都会执行这里的代码,然后移除即可;
3、在App.vue中,监听路由切换事件,然后移除即可。

其中2、3比较好,可以只写一处代码,就可实现整个项目都能移除el-tooltip或el-dropdown的功能。

三、解决

以路由守卫为例:

router.beforeEach((to, from, next) => {
  try {
    let tooltipList = document.getElementsByClassName('el-tooltip__popper')
    for (let tip in tooltipList) {
      let tipItem = tooltipList[tip]
      if (typeof tipItem == 'object') {
        tipItem.style.display = 'none'
      }
    }
  } catch (error) {
    console.log('error--tooltip', error)
  }
  try {
   const allTooltips = document.querySelectorAll('.el-tooltip__popper')
   if (allTooltips.length) {
   	Array.from(allTooltips).map((node) => document.body.removeChild(node))
   }
  } catch (error) {
    console.log('error--dropdown', error)
  }
})

写法上有多种,还有更多在这就不写了,希望对你有帮助

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值