河马日记

vuePress-theme-reco Mr.Tian    2019 - 2023
河马日记 河马日记

Choose mode

  • dark
  • auto
  • light
首页
分类
  • 后端
  • 前端
  • 随笔
  • 前后端结合
标签
时间线
联系方式
  • 微信
author-avatar

Mr.Tian

15

文章

5

标签

首页
分类
  • 后端
  • 前端
  • 随笔
  • 前后端结合
标签
时间线
联系方式
  • 微信
  • vue刷新页面

vue刷新页面

vuePress-theme-reco Mr.Tian    2019 - 2023

vue刷新页面


Mr.Tian 2019-11-09 23:59:42 vue

当我们对页面数据进行修改时,可能会用到页面刷新,当然可以通过再次调用获取数据的方法进行刷新数据显示,但是当该页面引入了其他页面时,在本页面重新调用获取数据的方法,引入的页面数据并不会更新,所以这时要对整个页面进行刷新,这时可能会想到我们在跳转路由那篇文章中讲到的方法,但是用vue-router重新路由到当前页面,页面是不进行刷新的,采用window.reload(),或者router.go(0)刷新时,整个浏览器进行了重新加载,闪烁,视觉体验较差。

可以通过provide / inject 组合,允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

<template>
  <transition>
    <router-view v-if="isRouterAlive"></router-view>
  </transition>
</template>
<script>
  export default {
    provide(){
      return{
        reload:this.reload
      }
    },
    data(){
      return{
        isRouterAlive:true
      }
    },
    methods: {
      reload(){
        this.isRouterAlive = false
        this.$nextTick(function(){
          this.isRouterAlive = true
        })
      }
    }
  }
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

声明reload方法,控制router-view的显示或隐藏,从而控制页面的再次加载。在页面注入App.vue组件提供(provide)的reload依赖,在逻辑完成之后(删除或添加...),直接this.reload()调用,即可刷新当前页面。

<script>
  export default {
    inject: ["reload"]
  }
  methods: {
    refresh(){
      this.reload();
    }
  }
</script>
1
2
3
4
5
6
7
8
9
10