最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于vue中對window.openner的使用指南

 更新時間:2022年11月23日 12:02:25   作者:NewName  
opener屬性是一個可讀可寫的屬性,可返回對創(chuàng)建該窗口的Window對象的引用,下面這篇文章主要給大家介紹了關(guān)于vue中對window.openner使用的相關(guān)資料,需要的朋友可以參考下

前言

先說結(jié)論:window.openner是做什么的?在vue中新窗口可以使用window.openner調(diào)用父窗口的方法。下面就來通過筆者的文章進(jìn)行更詳細(xì)的學(xué)習(xí)吧!

背景

最近項目中使用到了Mqtt做即時通訊的功能,需求要求主頁面全局要有一個消息提示功能,當(dāng)收到一條消息則小鈴鐺右上方顯示新消息的數(shù)目,點擊小鈴鐺則全局停止接收消息并且瀏覽器打開新窗口,在新頁面中接收消息,如下圖所示:

要實現(xiàn)如上需求需要考慮如下幾點:

(1)在父頁面中建立Mqtt連接并接收消息

(2)點擊小鈴鐺時,斷開父頁面mqtt連接并且在新窗口打開頁面

(3)在新頁面中建立Mqtt連接并接收消息

(4)新頁面關(guān)閉時,要通知父頁面重新建立Mqtt連接并接收消息

以失敗告終的嘗試——EventBus

小腦瓜左思右想之后,確定了關(guān)鍵點不就在于新窗口關(guān)閉了通知一下父窗口嗎~ 用EventBus試試吧!于是乎寫了如下代碼:

main.js文件中:

Vue.prototype.$EventBus = new Vue()

父頁面中寫一個方法用于在新窗口中打開子頁面:

toServerWorkbench() {
  const path = this.$router.resolve({ name: 'CustomerService' })
  window.open(path.href, '_blank')
},

父頁面created生命周期中監(jiān)聽reConnect事件:

this.$EventBus.$on('reConnect', () => {
  console.log('接到通知重新連接')
  this.getMqttInfo()
})

新窗口頁面beforeDestroy生命周期中觸發(fā)reConnect事件:

this.$EventBus.$emit('reConnect', {})

幾下子代碼寫完了,幸福感爆棚感覺可以摸魚了!然而一測試發(fā)現(xiàn)沒有效果(藍(lán)瘦香菇)~想了想,不好使很正常啊,都是新窗口打開的頁面和原來的頁面都不是一個vue實例了,就沒有辦法使用EventBus進(jìn)行通訊了。

救星——Window.opener

于是乎查資料了解到Window.opener可以返回對打開當(dāng)前窗口的那個窗口的引用。也就說如果A打開了B,那么B中可以使用Window.openner來引用A。

于是寫了如下代碼:

父頁面created生命周期:

window.reConnect = () => {
  console.log('接到通知重新連接')
  this.getMqttInfo()
};

這段代碼給父頁面增加了一個reConnect方法,注意是加在了window上,這樣才能使用window.openner取到這個reConnect方法。

子頁面beforeDestroy生命周期:

if (window.opener && window.opener.reConnect) {
  window.opener.reConnect()
} else {
  window.opener.frames[0].reConnect()
}

注意,這段代碼寫在子頁面的beforeDestroy中也是不起作用的,在關(guān)閉子頁面時父頁面的reConnect方法并不能被調(diào)用。

于是又查資料了解到window的onbeforeunload事件,當(dāng)瀏覽器窗口關(guān)閉或者刷新時,會觸發(fā) beforeunload 事件。

有了這個事件,我們可以使網(wǎng)頁能夠觸發(fā)一個確認(rèn)對話框,詢問用戶是否真的要離開該頁面。如果用戶確認(rèn),瀏覽器將導(dǎo)航到新頁面,否則導(dǎo)航將會取消。同樣的,我們可以在這個事件中調(diào)用父頁面的方法,如下代碼所示:

created() {
  window.onbeforeunload = () => {
    if (window.opener && window.opener.reConnect) {
      window.opener.reConnect()
    } else {
      window.opener.frames[0].reConnect()
    }
  }
},

這樣問題終于解決啦~

補充:vue 頁面window.opener用法(在子窗體中獲得父窗體的方法)

1.當(dāng)通過window.open打開詳情頁面 查看頁數(shù)據(jù)不發(fā)生變化

在子頁面調(diào)用window.opener.location.reload()//該方法可行,把父頁整體刷新,但不保留搜索條件這樣破壞了用戶輸入的查詢條件

不全頁面刷新,觸發(fā)“搜索”按鈕點擊

如圖:

子頁面調(diào)用

父頁面

總結(jié)

Window.opener可以返回對打開當(dāng)前窗口的那個窗口的引用,可以使用它調(diào)用父頁面的方法;當(dāng)瀏覽器窗口關(guān)閉或者刷新時會觸發(fā) beforeunload 事件,當(dāng)我們界面中有未提交的表單,或者有未保存的文本內(nèi)容,用戶點擊關(guān)閉按鈕,需要瀏覽器彈出提示框,就需要使用這個事件 onbeforeunload。

參考資料

【1】MDN:window.opener

【2】MDN: Window: beforeunload event

【3】window-onbeforeunload 的使用

到此這篇關(guān)于vue中對window.openner使用的文章就介紹到這了,更多相關(guān)vue中window.openner使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解vue-cli 2.0配置文件(小結(jié))

    詳解vue-cli 2.0配置文件(小結(jié))

    這篇文章主要介紹了詳解vue-cli 2.0配置文件(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • vue手寫加載動畫項目

    vue手寫加載動畫項目

    這篇文章主要為大家詳細(xì)介紹了vue手寫加載動畫項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue-CLI與Vuex使用方法實例分析

    Vue-CLI與Vuex使用方法實例分析

    這篇文章主要介紹了Vue-CLI與Vuex使用方法,結(jié)合實例形式分析了Vue-CLI創(chuàng)建項目與Vuex相關(guān)概念、使用方法及操作注意事項,需要的朋友可以參考下
    2020-01-01
  • vue基于session和github-oauth2實現(xiàn)登錄注冊驗證思路詳解

    vue基于session和github-oauth2實現(xiàn)登錄注冊驗證思路詳解

    通過 sessionId 可以在 session 表中獲取用戶的信息,此外,還利用 session 表實現(xiàn)了GitHub 的 OAuth2 第三方登錄,本文講解前端通過簡單的方式實現(xiàn)一個基本的登錄注冊驗證功能,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Vue.js計算屬性的變化監(jiān)聽的示例詳解

    Vue.js計算屬性的變化監(jiān)聽的示例詳解

    在Vue.js中,計算屬性(computed properties)是組件的重要組成部分,它們根據(jù)組件的數(shù)據(jù)自動計算新的值,并在數(shù)據(jù)變化時自動更新,本文將深入探討如何在Vue.js中監(jiān)聽計算屬性的變化,幫助你更好地理解Vue.js的響應(yīng)式系統(tǒng),需要的朋友可以參考下
    2025-03-03
  • 基于VUE選擇上傳圖片并頁面顯示(圖片可刪除)

    基于VUE選擇上傳圖片并頁面顯示(圖片可刪除)

    這篇文章主要為大家詳細(xì)介紹了基于VUE選擇上傳圖片并頁面顯示,圖片可以刪除的效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vue中插槽slot的使用方法

    Vue中插槽slot的使用方法

    插槽就是子組件中的提供給父組件使用的一個占位符,用<slot></slot> 表示,父組件可以在這個占位符中填充任何模板代碼,如 HTML、組件等,填充的內(nèi)容會替換子組件的<slot></slot>標(biāo)簽,這篇文章主要介紹了Vue插槽的理解和使用,需要的朋友可以參考下
    2023-03-03
  • vue搜索和vue模糊搜索代碼實例

    vue搜索和vue模糊搜索代碼實例

    這篇文章主要介紹了vue搜索和vue模糊搜索,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Vue自定義指令實現(xiàn)checkbox全選功能的方法

    Vue自定義指令實現(xiàn)checkbox全選功能的方法

    下面小編就為大家分享一篇Vue自定義指令實現(xiàn)checkbox全選功能的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 解決vue刷新頁面以后丟失store的數(shù)據(jù)問題

    解決vue刷新頁面以后丟失store的數(shù)據(jù)問題

    這篇文章主要介紹了解決vue刷新頁面以后丟失store的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論

腾冲县| 鄄城县| 眉山市| 沁阳市| 金阳县| 定州市| 和龙市| 临海市| 东乌珠穆沁旗| 博罗县| 望谟县| 陈巴尔虎旗| 驻马店市| 孟村| 米易县| 龙胜| 云阳县| 禹城市| 鲁甸县| 历史| 乡城县| 沙雅县| 龙海市| 东阿县| 和平县| 龙陵县| 册亨县| 迭部县| 军事| 施秉县| 措美县| 阆中市| 四会市| 西林县| 祥云县| 东乌珠穆沁旗| 民和| 区。| 巍山| 施甸县| 黄大仙区|