欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-19 08:26:05
...

最近项目加了一个新需求,游客模式在点击某些按钮是需要跳出登陆框,登陆成功后才可以生效,所以需要在登陆成功后重新刷新当前页面,下面总结了一些我的尝试方法:
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()
		}
	}
}
相关标签: vue.js开发历程