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()
}
}
}
上一篇: java 自定义注解实现权限判断
下一篇: 使用COALESCE+SUM+CASE