vue项目关闭子页面,并更新父页面的数据

今天下午是一个非常痛苦的,想要实现一个功能:

父页面打开了一个新的页面(浏览器打开一个新的窗口),并在子页面提交数据之后,父页面的数据要同步更新。

难点:父页面是一个表格列表,有分页功能,更新数据之后,要保证页面还在原来的页面。

把子页面关闭之后返回原来的页面,更新对应数据。

简单说下最开始使用的方法,以及最终采用方法,中间尝试的方法暂时略过不谈了…

  1. 关闭当前窗口,强制刷新父页面
    window.opener.location.reload();刷新父窗口
    window.close();关闭当前窗口
    

    上面两行代码网上推荐的比较多的,但是存在问题:

    1. window.opener意思是当前浏览器窗口的打开者,就是指父窗口。window.opener.location.reload()强制刷新了父窗口,也就是说,并不会保留父窗口原有的状态。
    2. window.close();只是单纯的将当前窗口关闭了,焦点并不一定会回到父窗口。(若是打开子窗口的时候,同时打开了其它网页的窗口,关闭子窗口,焦点可能回到你刚刚浏览过的窗口)

在实现这个功能的时候,尝试过诸如以下方法:

  1. 利用浏览器缓存父窗口参数,带参数刷新父窗口。

  2. 在子组件内调用父窗口的方法(因为不是直接父子组件的关系,还尝试利用中间组件实现子组件内调用父组件方法)。

  3. 在子组件内调用父窗口的方法(第二个方法没有成功,又尝试了将父组件方法暴露给window对象也没成功)。

  4. 成功解决问题

尝试了很多方法多没有成功,我又回到了起点,开始分析问题。

分析之后发现其实这个大问题可以分为两个小问题:

  1. 子窗口关闭后,焦点需要回到父窗口;
  2. 焦点回到父窗口后,父窗口需要带状态刷新页面。

那我就一一攻破,首先是第一个小问题,查到了一些资料之后,发现可以实现,代码如下:

  1. 子窗口关闭

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue关闭弹窗并同时刷新页面的方法有多种。以下是一个常用的解决方案: 首先,在页面中使用Vue的`v-if`指令来控制弹窗的显示隐藏。假设页面中有一个名为`showDialog`的数据属性,用于控制弹窗的显示状态。 在页面的模板中,可以使用如下代码判断是否显示弹窗: ```html <template> <div> <!-- 页面的内容 --> <button @click="showDialog = true">打开弹窗</button> <!-- 弹窗组件 --> <child-dialog v-if="showDialog" @closeDialog="closeDialog"></child-dialog> </div> </template> ``` 在弹窗组件的模板中,需要引入Vue的`$emit`方法,当关闭弹窗时触发一个自定义事件,并通过`$emit`方法向组件传递该事件。例如,假设弹窗中有一个关闭按钮,点击关闭按钮时触发关闭弹窗的操作: ```html <template> <div> <!-- 弹窗的内容 --> <button @click="closeDialog">关闭弹窗</button> </div> </template> ``` 在弹窗组件的脚本部分,需要通过Vue的`$emit`方法触发`closeDialog`自定义事件,并将其传递给组件: ```javascript <script> export default { methods: { closeDialog() { this.$emit('closeDialog'); // 触发关闭弹窗的自定义事件 } } } </script> ``` 最后,在页面的脚本部分,定义一个`closeDialog`方法用于关闭弹窗,并在该方法中刷新页面: ```javascript <script> export default { data() { return { showDialog: false // 控制弹窗显示隐藏数据属性 } }, methods: { closeDialog() { this.showDialog = false; // 关闭弹窗 window.location.reload(); // 刷新页面 } } } </script> ``` 通过以上操作,在组件触发`closeDialog`自定义事件时,会调用关闭弹窗的方法,并刷新页面。这样就实现了在关闭弹窗时同时刷新页面的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值