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

vue使用window.open()跳轉(zhuǎn)頁面的代碼案例

 更新時(shí)間:2022年11月25日 15:59:04   作者:NewName  
這篇文章主要介紹了vue中對(duì)window.openner的使用,vue使用window.open()跳轉(zhuǎn)頁面的代碼案例,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下

vue使用window.open()跳轉(zhuǎn)頁面

項(xiàng)目場(chǎng)景:

提示:項(xiàng)目需要vue帶參數(shù)跳轉(zhuǎn)打開新頁面、新窗口

例如:點(diǎn)擊機(jī)巢監(jiān)控按鈕,在當(dāng)前頁面重新打開一個(gè)窗口到另一個(gè)頁面(同時(shí)把參數(shù)全部帶過去)

window.open()的用法

open() 方法用于打開一個(gè)新的瀏覽器窗口或查找一個(gè)已命名的窗口。

window.open(URL,name,specs,replace)

specs

可選。一個(gè)逗號(hào)分隔的項(xiàng)目列表。支持以下值:

channelmode=yes|no|1|0是否要在影院模式顯示 window。默認(rèn)是沒有的。僅限IE瀏覽器
directories=yes|no|1|0是否添加目錄按鈕。默認(rèn)是肯定的。僅限IE瀏覽器
fullscreen=yes|no|1|0瀏覽器是否顯示全屏模式。默認(rèn)是沒有的。在全屏模式下的 window,還必須在影院模式。僅限IE瀏覽器
height=pixels窗口的高度。最小.值為100
left=pixels該窗口的左側(cè)位置
location=yes|no|1|0是否顯示地址字段.默認(rèn)值是yes
menubar=yes|no|1|0是否顯示菜單欄.默認(rèn)值是yes
resizable=yes|no|1|0是否可調(diào)整窗口大小.默認(rèn)值是yes
scrollbars=yes|no|1|0是否顯示滾動(dòng)條.默認(rèn)值是yes
status=yes|no|1|0是否要添加一個(gè)狀態(tài)欄.默認(rèn)值是yes
titlebar=yes|no|1|0是否顯示標(biāo)題欄.被忽略,除非調(diào)用HTML應(yīng)用程序或一個(gè)值得信賴的對(duì)話框.默認(rèn)值是yes
toolbar=yes|no|1|0是否顯示瀏覽器工具欄.默認(rèn)值是yes
top=pixels窗口頂部的位置.僅限IE瀏覽器
width=pixels窗口的寬度.最小.值為100

replaceOptional.Specifies規(guī)定了裝載到窗口的 URL 是在窗口的瀏覽歷史中創(chuàng)建一個(gè)新條目,還是替換瀏覽歷史中的當(dāng)前條目。支持下面的值:
  • true - URL 替換瀏覽歷史中的當(dāng)前條目。
  • false - URL 在瀏覽歷史中創(chuàng)建新的條目。

碼如下:

路徑:

{
    path: "/machineMonitor",
    name: "xxx平臺(tái)",
    component: () => import("@/page/machineMonitor"),
    meta: {
      keepAlive: false,
      isTab: false,
      isAuth: true
    }
  },

 按鈕:

 <el-button size="mini" type="primary" @click="handleReadMachine(item)"
     style="margin: 5px 5px 5px 0"><i class="my-icon el-icon-view"></i>&nbsp;機(jī)巢監(jiān)控
</el-button>

 跳轉(zhuǎn)事件: 

handleReadMachine(row) {
      let newUrl = this.$router.resolve({
        path: "/machineMonitor",
        query: {
          data: JSON.stringify(row),
        },
      });
      window.open(newUrl.href, "_blank");
    },

vue中對(duì)window.openner的使用

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

背景

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

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

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

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

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

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

以失敗告終的嘗試——EventBus

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

main.js文件中:

Vue.prototype.$EventBus = new Vue()

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

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', {})

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

救星——Window.opener

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

于是寫了如下代碼:

父頁面created生命周期:

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

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

子頁面beforeDestroy生命周期:

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

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

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

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

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

這樣問題終于解決啦~

總結(jié)

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

參考資料

【1】MDN:window.opener

【2】MDN: Window: beforeunload event

【3】window-onbeforeunload 的使用

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

相關(guān)文章

  • Vue3?封裝一個(gè)支持輸入和單/多選InputSelect組件-Antd詳解

    Vue3?封裝一個(gè)支持輸入和單/多選InputSelect組件-Antd詳解

    Antd的Select組件默認(rèn)不支持作為輸入框使用或手動(dòng)添加選項(xiàng),為了實(shí)現(xiàn)這一功能,我們封裝了一個(gè)通用組件,支持單選和多選模式,并允許用戶在組件失焦時(shí)手動(dòng)輸入選項(xiàng),主要通過定義searchText存儲(chǔ)輸入數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • vue實(shí)現(xiàn)點(diǎn)擊導(dǎo)航欄滾動(dòng)頁面到指定位置的功能(推薦)

    vue實(shí)現(xiàn)點(diǎn)擊導(dǎo)航欄滾動(dòng)頁面到指定位置的功能(推薦)

    這篇文章主要介紹了vue實(shí)現(xiàn)點(diǎn)擊導(dǎo)航欄滾動(dòng)頁面到指定位置的功能(推薦),步驟一是是通過獲取不同板塊的滾輪高度,步驟二通過編寫執(zhí)行滾動(dòng)操作的函數(shù),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue使用video.js進(jìn)行視頻播放功能

    vue使用video.js進(jìn)行視頻播放功能

    video.js是一個(gè)擁有h5背景的網(wǎng)絡(luò)視頻播放器,同時(shí)支持h5以及Flash視頻播放,這篇文章主要介紹了vue中使用video.js進(jìn)行視頻播放,需要的朋友可以參考下
    2019-07-07
  • vue組件開發(fā)之用戶無限添加自定義填寫表單的方法

    vue組件開發(fā)之用戶無限添加自定義填寫表單的方法

    今天小編就為大家分享一篇vue組件開發(fā)之用戶無限添加自定義填寫表單的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • VUE3項(xiàng)目VITE打包優(yōu)化的實(shí)現(xiàn)

    VUE3項(xiàng)目VITE打包優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了VUE3項(xiàng)目VITE打包優(yōu)化的實(shí)現(xiàn),包括使用視圖分析工具、路由懶加載、第三方庫(kù)CDN引入、gzip壓縮、按需引入第三方庫(kù)、TreeShaking、剔除console和debugger、分包策略和圖片壓縮等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 解決vue+elementui項(xiàng)目打包后樣式變化問題

    解決vue+elementui項(xiàng)目打包后樣式變化問題

    這篇文章主要介紹了解決vue+elementui項(xiàng)目打包后樣式變化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 一文教會(huì)你vue中使用async和await

    一文教會(huì)你vue中使用async和await

    async和await作為異步函數(shù),語法很簡(jiǎn)單,就是在函數(shù)前面加上async 關(guān)鍵字,來表示它是異步的,下面這篇文章主要給大家介紹了如何通過一文教會(huì)你vue中使用async和await的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Element中使用ECharts的項(xiàng)目實(shí)踐

    Element中使用ECharts的項(xiàng)目實(shí)踐

    本文主要介紹了Element中使用ECharts的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue打包時(shí)不刪除dist里的原有文件配置方法

    vue打包時(shí)不刪除dist里的原有文件配置方法

    這篇文章主要為大家介紹了vue打包時(shí)不刪除dist里的原有文件配置方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • vue實(shí)現(xiàn)可增刪查改的成績(jī)單

    vue實(shí)現(xiàn)可增刪查改的成績(jī)單

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)可增刪查改的成績(jī)單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論

肥乡县| 榆社县| 汉源县| 阳东县| 新疆| 三门峡市| 鸡泽县| 潼关县| 南溪县| 衡阳县| 北流市| 青龙| 多伦县| 平安县| 商都县| 福贡县| 辰溪县| 深圳市| 湘阴县| 蓬莱市| 大悟县| 莱阳市| 曲周县| 揭阳市| 宁陵县| 宣城市| 顺平县| 利川市| 铁力市| 天祝| 大余县| 曲靖市| 正镶白旗| 沈丘县| 吴堡县| 隆尧县| 公安县| 南和县| 苏州市| 新乡市| 舟山市|