vue子页面控制父页面刷新问题
作者:Take Me Down
这篇文章主要介绍了vue子页面控制父页面刷新问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue子页面控制父页面刷新
父页面
//父组件调用子组件 <el-dialog :visible.sync="showDialog" width="65%"> <version v-if="showDialog" :versionId="versionId" :currentVersion="currentVersion" :batchNo="batchNo" :showDialog="showDialog" :subjectList="subject" @on-load = "onLoad" @refresh-change="handleRefreshChange"//调用方法 ></version> </el-dialog> methods:{ handleRefreshChange() { this.onLoad(this.page);//调用父组件的刷新方法 }, }
子页面
//在需要点击后刷新的位置添加上 this.$emit('refresh-change',true);
vue刷新页面的三种方式,并处理死循环
vue页面刷新的办法和处理页面重复循环。先写一下刷新页面的方法,解决循环放在下边。
1.直接使用刷新当前页面
会有短暂白屏,体验效果不好
location.reload();
2.通过路由传入0,刷新当前页面
忽悠短暂白屏,体验效果不好
this.$router.go(0);
3.通过provide / inject组合
这个体验感是最好的!
第一步:先在App.vue里 给 <router-view> 加一个 if 判断,通过 $nextTick()实现先移除再添加达到刷新的功能。
<template> <div id="app"> <router-view v-if="isRouterAlive"> </router-view> </div> </template> <script> export default { name: "App", data() { return { isRouterAlive: true, }; }, provide() { return { reload: this.reload, }; }, methods: { reload() { this.isRouterAlive = false; //先关闭, this.$nextTick(function () { this.isRouterAlive = true; //再打开 }); }, }, }; </script>
第二步:在需要用到刷新的页面接收 inject:['reload']
export default { inject:['reload'], data () { return {} },
第三步:在需要使用到刷新的地方直接调用
this.reload();
接下来,说下死循环,这个是因为刷新页面后,这段代码又重新执行。
想要解决有两种方法
1.在想要刷新的地方使用点击事件,这样只有在点击的时候会触发这个刷新事件
<template> <div> <button @click="cli"></button> </div> </template> <script> export default { name: "1", methods: { cli() { this.$router.go(0); //我这里随便用一种刷新的方法 }, }, }; </script> <style scoped> </style>
2.这种方法,使用定时器的办法,不通过手动点击,自动触发
<template> <div></div> </template> <script> export default { name: "1", mounted() { setInterval(() => { this.$router.go(0); //我这里随便用一种刷新的方法 }, 300000); //每5分钟自动调用一次 }, }; </script> <style scoped> </style>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。