基于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
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
2
3
4
5
6
7
8
9
10
11
12
13
通过 inject 方法引入到需要的组件中, 直接this.reload() 调用这个方法即可.
← 封装树形菜单 vue3.o源码分析 →