vue 进入到一个新路由页面后,路由组件页面缓存,如何实现路由组件刷新重载?

2 篇文章 0 订阅

一、如何实现路由重新加载?

1-1、设置要刷新的组件v-if,通过v-if实现页面组件层重载。
<template>
	<el-container>
	  <el-header>Header</el-header>
	  <el-container>
	    <el-aside width="200px">Aside</el-aside>
	    <el-main v-if="isRouterCache">  <router-view  /></el-main>
	  </el-container>
	</el-container>
</template>
<script>
export default {
 name:'Layout',
 data () {
   return {
     isRouterCache: true
   }
 },
 methods: {
   reload () {
     this.isRouterCache = false
     this.$nextTick(() => (this.isRouterCache = true))
   }   
 }
}
</script>

注意:当前组件其实是layout.vue组件他的上一层还有app.vue组件。

1-2、对外暴露main.js中的 new Vue()实例。

在这里插入图片描述

1-3、来到我们的路由守卫配置页面。

在这里插入图片描述

1-4、配置router.beforeEach钩子守卫。
router.beforeEach((to, from, next) => {
        // 此处用于判断  然后刷新main组件$vue.$root.$children[0].$children[0]就相当于与layout组件  对应可以获取到reload方法,从而实现刷新。
        if ($vue.$root.$children[0].$children[0]) {
          $vue.$root.$children[0].$children[0].reload()
        }
        next()
      }
})

此处我们可以通过$vue去获取到当前组件的实例,再次通过$root去拿到我们的根组件,第一次 $children[0] 相当于app.vue,再一次相当于layout.vue组件,我们就可以通过这个组件实例去调用里面methods的方法。

这样既我们每次变更路由时,对应的main显示组件就会重载,这样也不会影响到如左侧或者上方的侧边栏、顶部栏等等。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归来巨星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值