Vue使用keep-alive后,el-tooltip悬浮内容在切换页面时不自动消失

比如在列表页面有个编号,编号过长时鼠标放上去会显示el-tooltip提示内容,当点击这个编号进入详情页面时,此提示内容不消失

 

 

通过分析,发现使用 keep-alive 后,页面切换时上一个页面的实例被缓存了,跳转的时候并没有销毁,所以才会残留 tooltips,所以有以下解决思路:

方法一:

页面离开组件时执行一个方法deactivated(),将页面上的tooltips隐藏掉,在每个页面的.vue文件里写以下代码。

// 离开组件时执行
  deactivated() {
    const myNodeList = document.querySelectorAll('.el-tooltip__popper')
    forEach(myNodeList, function(index, value) {
      value.style.display = 'none'
    }, null)
  },

问题得到解决。

方法二:App.vue里全局改

但系统里很多页面都用到了tooltips,给所有的.vue文件里面都加这个代码太麻烦了。

那么直接在App.vue里监听路由切换事件,路由切换时移除即可。

watch: {
    // keep-alive模式下,页面跳转前要手动移除残留的tooltip
    $route() {
        const allTooltips = document.querySelectorAll('.el-tooltip__popper')
        if (allTooltips.length) {
            Array.from(allTooltips).map((node) => document.body.removeChild(node))
        }
    }
}

方法三:permmision.js里全局改

vue-element-admin中,permission主要负责全局路由守卫和登录判断。

router.afterEach是vue全局的导航钩子函数,即进入某个路由之后触发的钩子函数。

在permmision.js里加如下代码:

router.afterEach(() => {
  const mypopoverList = document.querySelectorAll('.el-popover') // 获取页面所有popover的dom集合
  const mytooltipList = document.querySelectorAll('.el-tooltip__popper') // 获取页面所有tooltip的dom集合
  // 分别遍历让所有的悬浮框隐藏
  setTimeout(() => {
    mypopoverList.forEach((value) => {
      value.style.display = 'none'
    })
    mytooltipList.forEach((value) => {
      value.style.display = 'none'
    })
  }, 1000)
 
  NProgress.done() // 关闭进度条
})

欢迎大家提出宝贵意见!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值