vue中解決微信html5原生ios虛擬鍵返回不刷新問(wèn)題
問(wèn)題描述:
做微信h5頁(yè)面時(shí),經(jīng)過(guò)了微信授權(quán)才跳轉(zhuǎn)到一級(jí)默認(rèn)路由home.vue中,因此在home頁(yè)面時(shí)在IOS中底部會(huì)出現(xiàn)虛擬的返回鍵,安卓上不會(huì)出現(xiàn)。且在IOS點(diǎn)擊返回時(shí)會(huì)跳轉(zhuǎn)到home空白頁(yè)面不重新加載,但是在安卓機(jī)上點(diǎn)擊返回鍵會(huì)重新加載。
實(shí)現(xiàn)功能:
解決IOS問(wèn)題(在home頁(yè)面點(diǎn)返回時(shí)路由還是在home頁(yè)面,并完成重新加載)
分析:
需要在進(jìn)入頁(yè)面時(shí)加入監(jiān)聽(tīng),并在頁(yè)面離開(kāi)時(shí)移除監(jiān)聽(tīng)。因?yàn)閔ome頁(yè)面是個(gè)滾動(dòng)列表,所以我采用了keep-alive路由緩存,所以不能在created()和beforeDestroy()生命周期中寫(xiě),因此我在home.vue中加了組件內(nèi)的守衛(wèi)beforeRouteLeave ()在里面移除監(jiān)聽(tīng),在activated()中添加監(jiān)聽(tīng)。
如果頁(yè)面沒(méi)有采用路由緩存,則監(jiān)聽(tīng)事件和移除事件可以在created()和beforeDestroy()這兩個(gè)生命周期函數(shù)中寫(xiě)。
注意:
addEventListener()與removeEventListener()用于處理指定和刪除事件處理程序操作。
它們都接受3個(gè)參數(shù):事件名、事件處理的函數(shù)和布爾值。
布爾值參數(shù)是true,表示在捕獲階段調(diào)用事件處理程序;
如果是false,表示在冒泡階段調(diào)用事件處理程序。
相同事件綁定和解除,需要使用共用函數(shù);如果removeEventListener不生效,可以看看這篇文章:https://blog.csdn.net/amyleeYMY/article/details/83382741
//監(jiān)聽(tīng)返回按鈕,重新加載當(dāng)前頁(yè)面
window.history.pushState(state, title, utl)//在頁(yè)面中創(chuàng)建一個(gè) history 實(shí)體,直接添加到歷史記中。
參數(shù):state:存儲(chǔ)一個(gè)對(duì)象,可以添加相關(guān)信息,可以使用 history.state 讀取其中的內(nèi)容。
title:歷史記錄的標(biāo)題(目前瀏覽器不支持)。
url:創(chuàng)建的歷史記錄的鏈接。進(jìn)行歷史記錄操作時(shí)會(huì)跳轉(zhuǎn)到該鏈接。
最終代碼:
home.vue
activated(){ //在頁(yè)面中創(chuàng)建一個(gè) history 實(shí)體,當(dāng)實(shí)體改變時(shí)會(huì)觸發(fā)popstate事件,跳轉(zhuǎn)到當(dāng)前頁(yè)面,并重新加載當(dāng)前頁(yè)面 window.history.pushState(null, 'ff', document.URL); window.addEventListener('popstate',this.reload,true) } //本來(lái)在deactivated中寫(xiě)移除事件監(jiān)聽(tīng)的,但是發(fā)現(xiàn)不能移除,可能這個(gè)生命周期是在路由跳轉(zhuǎn)完(keep-alive緩存的組件停用時(shí)調(diào)用)從而找不到那個(gè)this了,所以移除監(jiān)聽(tīng)失敗。 deactivated(){ window.removeEventListener('popstate',this.reload,true) } //所以采用組件內(nèi)的路由守衛(wèi)beforeRouteLeave,成功解決了移除監(jiān)聽(tīng)事件。 beforeRouteLeave (to, from, next) { // 導(dǎo)航離開(kāi)該組件的對(duì)應(yīng)路由時(shí)調(diào)用 window.removeEventListener('popstate',this.reload,true) //這個(gè)一定要寫(xiě)到next()前面 next() } methods:{ reload(){ window.location.reload()//重新加載 } }
main.js
import {Component} from "vue-property-decorator"; Component.registerHooks([ 'beforeRouteLeave', ]);
就這樣成功的解決IOS返回不刷新問(wèn)題~歡迎小伙伴來(lái)交流
到此這篇關(guān)于vue中解決微信html5原生ios虛擬鍵返回不刷新問(wèn)題的文章就介紹到這了,更多相關(guān)微信html5原生ios虛擬鍵返回不刷新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue中封裝axios并實(shí)現(xiàn)api接口的統(tǒng)一管理
- vue3.0 的 Composition API 的使用示例
- 詳解Vue中Axios封裝API接口的思路及方法
- vue項(xiàng)目打包為APP,靜態(tài)資源正常顯示,但API請(qǐng)求不到數(shù)據(jù)的操作
- Vue 使用typescript如何優(yōu)雅的調(diào)用swagger API
- vue設(shè)置全局訪(fǎng)問(wèn)接口A(yíng)PI地址操作
- Springboot項(xiàng)目使用html5的video標(biāo)簽完成視頻播放功能
- javascript實(shí)現(xiàn)移動(dòng)端 HTML5 圖片上傳預(yù)覽和壓縮功能示例
- JS+HTML5本地存儲(chǔ)Localstorage實(shí)現(xiàn)注冊(cè)登錄及驗(yàn)證功能示例
- JS+html5實(shí)現(xiàn)異步上傳圖片顯示上傳文件進(jìn)度條功能示例
- 如何在vue中使用HTML 5 拖放API
相關(guān)文章
vue axios重復(fù)點(diǎn)擊取消上一次請(qǐng)求封裝的方法
這篇文章主要介紹了vue axios重復(fù)點(diǎn)擊取消上一次請(qǐng)求封裝的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06vue中常見(jiàn)的問(wèn)題及解決方法總結(jié)(推薦)
這篇文章主要給大家介紹了關(guān)于vue中常見(jiàn)的問(wèn)題及解決方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04vue中報(bào)錯(cuò)“error‘xxx‘?is?defined?but?never?used”問(wèn)題及解決
介紹了兩種解決代碼導(dǎo)入問(wèn)題的方法:?jiǎn)我淮a解決和全局解決,第一種方法是在代碼前面添加特定代碼并保存;第二種方法是在package.json中添加代碼后重啟項(xiàng)目,這些方法可以有效解決導(dǎo)包錯(cuò)誤提示,希望對(duì)大家有幫助2024-10-10詳解如何去除vue項(xiàng)目中的#——History模式
這篇文章主要介紹了詳解如何去除vue項(xiàng)目中的#——History模式 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Vue+jsPlumb實(shí)現(xiàn)連線(xiàn)效果(支持滑動(dòng)連線(xiàn)和點(diǎn)擊連線(xiàn))
jsPlumb 是一個(gè)比較強(qiáng)大的繪圖組件,它提供了一種方法,主要用于連接網(wǎng)頁(yè)上的元素。本文將利用jsPlumb實(shí)現(xiàn)連線(xiàn)效果,同時(shí)支持滑動(dòng)連線(xiàn)和點(diǎn)擊連線(xiàn),感興趣的可以了解一下2023-01-01vue-router判斷頁(yè)面未登錄自動(dòng)跳轉(zhuǎn)到登錄頁(yè)的方法示例
這篇文章主要介紹了vue-router判斷頁(yè)面未登錄自動(dòng)跳轉(zhuǎn)到登錄頁(yè)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11vue + echarts實(shí)現(xiàn)中國(guó)省份地圖點(diǎn)擊聯(lián)動(dòng)
這篇文章主要介紹了vue + echarts實(shí)現(xiàn)中國(guó)地圖省份點(diǎn)擊聯(lián)動(dòng),需要的朋友可以參考下2022-04-04微信小程序?qū)崙?zhàn)基于vue2實(shí)現(xiàn)瀑布流的代碼實(shí)例
瀑布流,又稱(chēng)瀑布流式布局,是比較流行的一種網(wǎng)站頁(yè)面布局,視覺(jué)表現(xiàn)為參差不齊的多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部,這篇文章主要介紹了微信小程序?qū)崙?zhàn),基于vue2實(shí)現(xiàn)瀑布流,需要的朋友可以參考下2022-12-12