众所周知,在vue中bus等工具只能跨组件通信,如何实现跨窗口通信呢?
场景如下,我们在a窗口中新开了b窗口,想在b窗口中调用a窗口的方法?
这里还总结了一点window事件的方法:
window.opener.location.reload() 这样关闭b窗口后会刷新整个a窗口,体验效果不是很好
window.onunload 在关闭窗口之后触发
window.opener 获取父页面的window元素
注:
1.window.opener 实际上就是通过window.open()打开的窗体的父窗体
2.window.opener.父页面中的方法();//调用父页面中的方法
location.reload() 刷新页面
window.close() 关闭window.open()打开的窗口
window.onbeforeunload 关闭窗口前执行事件
a窗口:
mounted() { // 注:getbpagelist是提供给新窗口b触发的,实际上触发的是a的getapagelist方法 window["getbpagelist"] = (params) => { this.getapagelists(params); }; methods: { async getapagelists(){ let res = await getpagelist() ...... }, //点击新打开一个窗口b detailsview(data) { window.open(`....../${data.id}`); }, }
b窗口调用a窗口方法
注:具体场景可以很多,比如放在点击事件中,或者关闭窗口前等 methods:{ emitawindow(){ //window.opener 获取父页面的window元素 //判断a窗口有没有window.opener和getbpagelist是不是个方法 if (window.opener && window.opener.getbpagelist) { window.opener.getbpagelist(params); } else { //window.opener.frames[0] 获取到的window对象 window.opener.frames[0].getbpagelist(params); } } }
总结
到此这篇关于vue跨窗口通信之新窗口调用父窗口的文章就介绍到这了,更多相关vue新窗口调用父窗口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论