最近开发一个大屏可视化数据项目的某个后台管理系统的一些界面时,因为当前页面未完全自适应,导致浏览器窗口大小变化或者进入全屏时,部分模态框和弹窗样式位置不正确显示,因此,在综合了网上的方法后,写了一个简单的方法实现,记录下来备用
首先在需要变化的vue页面的mounted生命周期中添加以下代码
// 监听窗口变化 window.onresize = () => { return (() => { if (this.timer) { clearTimeout(this.timer) } this.timer = setTimeout(() => { // console.log('触发了') // this.$router.go(0) //此方法相当于强制刷新当前页,会造成闪屏 // this.reload() // 此方法不会闪屏,具体配置在下面 }, 300) })() }
而上面的方法中的this.reload则可以如下方式实现,在app.vue中
<template> <div id="app"> <router-view v-if="isRouterAlive"></router-view> </div> </template> <script> export default { name: 'App', provide () { //父组件中通过provide来提供变量,在子组件中通过inject来注入变量。 return { reload: this.reload } }, data() { return{ isRouterAlive: true //控制视图是否显示的变量 } }, methods: { reload () { this.isRouterAlive = false; //先关闭, this.$nextTick(function () { this.isRouterAlive = true; //再打开 }) } }, } </script>
然后,我们就可以在需要刷新页面的组件里这样写
export default { inject:['reload'], //注入App里的reload方法 data () { return { ....... } },
在需要刷新页面的代码块中使用,比如最开始我写的在window.onresize中使用
this.reload();
ok
完成啦