项目需求
要求在父窗口的数据列表里点击数据弹出子窗口预览,在弹出的预览页编辑内容之后关闭子窗口,同时静态刷新数据列表,而不是刷新整个父窗口。
如果在子窗口这样写是可以刷新父窗口但会全屏白一下不符合要求
// 刷新父窗口
window.opener.location.reload();
window.open("about:blank", "_top").close();
思路
思路一、父子组件之间传参。
子窗口传参给父组件,父窗口监听参数变化调用刷新方法。
思路二、cookies传参。
子窗口关闭时发送参数到cookies,父窗口监听cookies变化。
后来发现父窗口在不做任何操作的情况下虽然接收到了参数但没法调用局部刷新的代码。
最后写了一个时时侦听参数变化的代码可以实现了但是由于感觉这样太消耗资源还是被否了。
mounted(){
//每秒钟检测一次cookies中refreshPage的变化
setInterval(()=>{
if(this.$cookies.get('refreshPage') === 'true'){
this.$cookies.set('refreshPage','false');
this.getReturnList();//局部刷新的方法
}
},1000)
}
解决方法
最后在网上找了一段代码完美解决了,如下:
父窗口:
mounted(){
this.getReturnList();
// 将refreshPage方法绑定到window下面,提供给外部调用
window['refreshPage'] = () => {
this.getReturnList(); //局部刷新的方法
}
},
子窗口:
window.opener.refreshPage()