【VUE无闪烁无白屏刷新页面】provide和inject
provide / inject 组合
作用:允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
- 在 App.vue 文件里写入provide的方法
1 <template> 2 <div id="app"> 3 <router-view v-if="isActive" /> 4 </div> 5 </template> 6 7 <script> 8 export default { 9 name: 'App', 10 data () { 11 return { 12 isActive: true 13 } 14 }, 15 provide () { 16 return { 17 reload: () => { 18 return new Promise((resolve, reject) => { 19 this.isActive = false; 20 this.$nextTick(() => { 21 this.isActive = true; 22 }) 23 resolve() 24 }) 25 } 26 } 27 } 28 } 29 </script>
provide的另一种方法:
1 provide () { 2 return { 3 reload: this.reload 4 } 5 }, 6 methods: { 7 reload () { 8 this.isActive = false; 9 this.$nextTick(() => { 10 this.isActive = true; 11 }) 12 } 13 }
- 在需要刷新的子孙组件中用inject注入 App.vue 中provide声明的变量
1 data () { 2 return {} 3 }, 4 inject: ['reload'], 5 computed: { 6 ...mapGetters([ 7 'getComFlag' 8 ]) 9 },
- 使用:
<el-button @click="reloadFun">刷新按钮</el-button>
1 methods: { 2 reloadFun () { 3 this.reload(); // 直接使用 4 },
或者
reloadFun () { this.reload().then(res => { debugger }); // 直接使用 },