### 点击侧边栏,刷新当前路由

应用场景:点击侧边栏,来重新刷新当前的页面
目前情况:用vue/vue-router创建的spa(单页面开发)项目,用户点击当前高亮的路由并不会刷新view,因为vue-router会拦截你的路由,他判断你的url没有任何变化,所以他不会触发任何钩子或是view变化
强制刷新页面方法:

这些方法目前只适用在使用点击触发路由变化的情况下this.$router.push()
  1. 加时间戳,注意:此方法不管用
    在网上面找了好多资料,都有说这个方法的。但是,应用在项目上面去不管用。
  2. 使用vue-router中的历史记录go
    // 判断是否点击的是当前路径的路由
    this.$router.go(0)
  此方法会强制刷新整个浏览器,浏览器会出现`白页面`,加载时间长。用户的体验很不好(不推荐)。
  1. 使用provide/inject方法
    *** 利用v-if控制router-view,在路由容器组件里,在要刷新页面的路由出口处,实现一个刷新的方法
    1.********** 在APP.vue文件中 **********
    <template>
		<router-view v-if='isRouterAlive' />
    </template>
    export default: {
    // 向后代注入这个provide中的所有内容
    provide(){
	     return {
		      reload: this.reload   // 调用的是menthods中的方法
	      }
     },
     data(){
	      return {
		       isRouterAlive: true
	       }
      },
      methods:{
	       reload(){
	       // 调用这个reload()函数时,v-if=false,页面会将router-view中的DOM元素全部删除,当页面更新完毕时,再重新创建一个router-view出口。这时里面的页面内容会重新加载。
		        this.isRouterAlive = false;
		        this.$nextTick(() => {
			         this.isRouterAlive = true
		         })
	        }
       }
     }
     2.********** 在需要接受这个函数的子组件中 **********
     export default{
	      // 接受这个函数
	      inject: ['reload'],
	      // 在函数中调用使用
	      this.reload()
      }
    使用provide/injecr方法:
    **provide:**将我们想要提供给后代组件的数据/方法
    **inject:**用来接收我们想要添加在这个实力上的属性
    使用这个方法,可以也可以将isRouterAlive这个状态设置在VUEX中,进行变更
  1. 在路由上面添加时间戳,但是要和router-view一起使用
    1. 在菜单的路由跳转上绑定一个随机query参数,例如时间戳或是随机数
     this.$router.push({
      path:'跳转的路径 ',
      query:{
	       t: Date.now()
       }
      })
	    2. 在路由容器上面绑定key值, 他会通过key值的变化强制刷新该组件下的内容。会重新组建
	    当路由改变时,携带有随机数,每次展示的内容都会在不同的路由出口下面
	    <router-view :key='$router.path+ $router.query.t' />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值