Vue项目刷新页面的几种方法总结

利用vue作的后台管理系统是单页面系统,当你想实现刷新的功能一般有如下几个方法:vue

(1)window.location.reload()浏览器

  这个是原生js中提供的一种刷新方法,用于刷新当前文档。app

(2)this.$router.go(0)dom

  vue-route提供的一种方法,在history记录中前进或者后退val步,当val为0时刷新当前页面。ide

  以上两种方法,用的人都知道,这两种方法都相似于浏览器上的刷新页面按钮。回致使页面出现短暂的闪烁(从新加载页面),虽然简单粗暴,可是用户体验极差。函数

  其实,局部的刷新就是小组件之间的刷新。最多的刷新场景就是对table列表中某条数据打开dialog框进行增删改以后刷新table的操做。这种能够每一个页面都单独写好一个查询表格的公共的方法,在mounted周期的时候能够调用用于页面打开的时候默认展现table数据,须要的时候也能够调用用于刷新table数据。或是考虑如下两种方法,可是如下两种方法其实也是依靠mounted这个钩子函数来进行刷新的,只是少声明了一个公共方法而已。this

(3)先跳转到一个空白组件,在跳转回原组件,触发钩子函数从新渲染达到刷新的目的。url

首先,先定义一个空白组件:spa

<template>
    <div></div>
</template>
 
<script>
    export default{
        data() {
            return{
            }
        },
        beforeRouteEnter (to, from, next) {
            next(vm=>{
                vm.$router.replace({
                    path:from.fullPath
                })
            })
        },
    }
</script>

  该空白组件须要在route.js中定义path以及component路径;其中next(vm=>{})这个里面的代码块里的代码很晚执行,在组件mounted周期以后才会被执行,执行的结果为跳回原组件。而后在须要刷新的地方调用this.$router.replace({path:'/XXXX'}),其中XXXX为以前route.js中定义的空白组件的path。导航栏里的url地址切换很快,基本看不到空白组件与原组件之间路径名切换。code

(4)利用组件的provide/inject选项(推荐)。

  这对选项须要一块儿使用,以容许一个祖先组件向其全部子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

先在App.vue中声明一个reload方法

<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(function () {
        this.isRouterAlive = true
      })
    }
  },
};
</script>

而后在须要刷新的页面中这样注入。

<script>
export default {
    inject:['reload'], //注入App.vue组件提供(provide)的 reload 依赖
    data () {
        return {
            //.......
        }
    },
    mounted:function(){
        //默认请求数据
    },
}
</script>

最后,在须要刷新的地方直接调用this.reload()便可。这样App.vue中的<router-view></router-view>会由于v-if快速的由显->隐->显(true->false->true)。但由于v-if是经过控制dom节点的存在与否来控制元素的显隐,切换有一个局部编译/卸载的过程,因此切换过程当中会销毁和重建内部的事件监听和子组件,以此达到刷新组件的目的。

相关文章
相关标签/搜索