vue项目刷新当前页面的三种方法

在Vue项目中,实现游客模式登录后刷新页面的需求。尝试了多种方法,如重新路由、强制刷新(F5)、跳转空白页再返回,最后找到了利用provide/inject组合方式在App.vue中声明reload方法,控制router-view达到刷新效果,避免了空白页或地址栏切换的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目加了一个新需求,游客模式在点击某些按钮是需要跳出登陆框,登陆成功后才可以生效,所以需要在登陆成功后重新刷新当前页面,下面总结了一些我的尝试方法:
1、我一开始的想法就是使用这种方式,直接重新跳转至当前页面

this.$router.replace({path:'/index'})

试过后发现用vue-router重新路由到当前页面,页面是不进行刷新的,根本没有任何作用,所以这种方法是不可行的;

2、然后就想到最直接的方式就是像ctrl+F5 一样强制刷新:

location. reload()
this.$router.go(0)

尝试过后发现,虽然目的达到了,重新刷新了整个页面,但是也像ctrl+F5 强制刷新那样,整个页面重新加载,然后会出现一个瞬间的空白页面,个人觉得体验很不好;

3、第三种方式想到的是新建一个空白页面blank.vue,点击确定的时候先跳转到这个空白页,然后再立马跳转回来,这个方法也是可行的,但是存在的一个问题是相比上一种虽然不会出现一瞬间的空白页,但是地址栏会有个快速的切换的过程,这种也不太好;

4、第四种方法个人觉得是最实用的:provide / inject 组合方式
首先,要修改下你的App.vue

<template>
  <div id="app">
    <router-view v-if="isRouterAlive"></router-view>
  </div>
</template>
<script>
export default {
  name: 'app',
  provide () {
    return {
      reload: this.reload
    }
  },
  data () {
    return {
      isRouterAlive: true
    }
  },
  methods: {
    // 解决登陆成功后重新加载当前页面方法
    reload () {
      this.isRouterAlive = false
      this.$nextTick(() => {
        this.isRouterAlive = true
      })
    }
  }
}
</script>

通过声明reload方法,控制router-view的显示或隐藏,从而控制页面的再次加载
然后我们需要在刷新当前页的页面中注入App.vue组件提供(provide)的 reload 依赖,然后直接用this.reload来调用就行

export default {
	name:'index',
	inject: ['reload'],
	data(){
		return {
		
		}
	},
	method:{
		loginSuccess(){
			//直接调用
			this.reload()
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值