Vue 项目刷新当前页面

有时候我们在项目的页面中做了一些操作,执行完某个动作,改变了某些状态,需要重新刷新页面,以此来重新渲染页面。如:用户登录成功、增加、删除、更新等。

原来解决办法:

1、原始方法:

location.reload();

会出现短暂的闪烁,画面一闪,体验不是很好

2、vue自带的路由跳转:

this.$router.go(0);

这种方法虽然代码很少,只有一行,但是体验很差。页面会一瞬间的白屏,体验不是很好

3、用 vue-router 重新路由到当前页面,页面是不进行刷新的。

推荐解决办法:

provide/inject 组合

原理:允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效

在 App.vue 声明 reload 方法,控制 router-view 的显示或隐藏,从而控制页面的再次加载。

<template>
    <div id="app">
        <router-view v-if="isRouterAlive"></router-view>
    </div>
</template>
<script>
    export default {
        name: 'App',
        provide () {    //父组件中通过provide来提供变量,在子组件中通过inject来注入变量。                                             
            return {
                reload: this.reload                                              
            }
        },
        data() {
            return{
                isRouterAlive: true                    //控制视图是否显示的变量
            }
        },
        methods: {
            reload () {
                this.isRouterAlive = false;            //先关闭,
                this.$nextTick(function () {
                    this.isRouterAlive = true;         //再打开
                }) 
            }
        },
    }
</script>

接下来,我们就可以在需要刷新页面的组件里这样写:

export default {
    inject:['reload'],   //注入App里的reload方法
    data () {
        return {
        .......
        }
    },
}

在需要刷新页面的代码块中使用:

this.reload();
原文地址:https://www.cnblogs.com/joe235/p/13630680.html