如何在vue项目中实现刷新页面的效果

2,335 阅读1分钟

平常实现页面刷新其实也很方便,直接用location.reload()方法实现刷新,但是这么刷新用户体验感觉很不好,平白无故的页面刷新然后重新加载,如何避免这样一个效果呢

1.带上当前页面路由跳转到一个重定向的页面,重定向页面再跳转回来.

    新建一个refresh.vue文件
    <script>
    export default {
    name: "refresh",
    beforeCreate(){
        this.$router.push(this.$route.query.path)
        },
    };
    </script>
    
    router.js配置一个refresh路由
    import refresh from './components/refresh.vue'
    {
        path: '/refresh',
        name: 'refresh',
        component: refresh
    }
    
    在要刷新的地方跳转传参即可
    reflesh(){
        this.$router.push({path:'/refresh',query:{path:this.$route.fullPath}})
        }

2.通过v-if的功能触发页面刷新,结合provide和inject

修改app.vue,利用v-if可以刷新页面的属性,同时使用provide和inject将祖先节点的数据传递给子代节点

<template>
    <div id="app">
        <router-view v-if="isShow"></router-view>
    </div>
</template>

<script>
export default {
  name: 'App',
  provide () {
    return {
      reload: this.reload
    }
  },
  data () {
    return {
      isShow: true
    }
  },
  methods: {
    reload () {
      this.isShow= false
      this.$nextTick(function () {
        this.isShow= true
      })
    }
  }
}
</script>
在要刷新的子路由页面引入inject,然后执行reload事件即可刷新页面
    export default {
      name: "demo",
      inject:['reload'],
      data() {
        return {
          
        }
      },
      methods: {
        reflesh(){
          this.reload()
        },
      }
    }

对比: 方法一有一个小问题是点击浏览器返回相当于没点击,因为跳转的是refresh页面,尔refresh又会跳回原页面.
方法二就没有上述问题,所以个人更推荐方法二