vue 项目中刷新页面

之前最常用的是 this.$router.go(0),类似直接点浏览器的刷新按钮,此类方法会导致 URL 刷新时闪烁且用户体验极差,这是强刷新。

解决方法 

        在 app.vue 页面内(如果根组件不叫这个,那就找路由出口 <router-view /> ),通过 v-if 条件渲染是在 DOM树中进行节点的删除和增加,所以浏览器会对其进行回流再渲染。将组件进行卸载,再挂载回去(这期间就会触发生命周期函数,进行请求,数据更新),进行页面的刷新

        在后台管理系统中,一些对话框组件,如果要传值也可以使用这个方法。

<template>
  <div id="app">
    <router-view v-if="isRouterAlive" />
  </div>
</template>
​
<script>
export default {
  name: 'App',
  provide () {
    return {
      reload: this.reload
    }
  },
  data () {
    return {
      isRouterAlive: true
    }
  },
  methods: {
    reload () {
      this.isRouterAlive = false
      this.$nextTick(function () {
        this.isRouterAlive = true
      })
    }
  }
}
</script>

然后就可以在任意一个组件内都可以使用 this.reload 方法,实现页面刷新

 inject: ['reload'],
  data () {
    return {}
  },