基于Vue的组件局部刷新

之前做keepalive,组件destroy销毁后,就不会缓存该页面了,解决的办法就是刷新当前的页面,一种是原始的刷新方式,一种就是基于框架本身的局部刷新,今天完善下基于vue的局部刷新。

我上次省事在做keepalive的时候,直接在页面内部做的局部刷新,具体看这大概是最全乎的keep-alive踩坑指南 (opens new window) ,实现的思路就是重置所有的data,然后在配合v-if,就能做到局部的刷新,然后可以自己定义一个mixins代码也是很简洁的,但是还是要每次都引入mixins,现在用另一种方式重新优化,原理跟上面的那个方法类似。

第一步 : 在 app.vue 中定义全局方法:如下

<template>
  <div id="app">
    <router-view v-if="isRouterAlive"/>    //通过v-if来控制容器的出现与消失
  </div>
</template>

<script>
export default {
  name: 'App',
  provide(){
    // 通过provide传递给子代,谁需要谁获取下就OK了
    return {
      reload:this.reload
    }
  },
  data(){
    return{
      isRouterAlive: true
    }
  },
  methods: {
   reload () {
     this.isRouterAlive = false
     this.$nextTick(() => (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
28

我们定义了全局的方法 reload( ); 原理就是通过控制组件容器的出现与消失, 达到重新渲染的效果 , 从而实现我们的目的;

第二步:在全局中定义了刷新的方法, 接下来就是要引入到需要刷新的组件中:

<script>
export default {
  inject:["reload"],
  data() {
    return {
      
    }
  },
  mounted() {
    this.reload();
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13

通过 inject 方法引入到需要的组件中, 直接this.reload() 调用这个方法即可.