這篇文章主要介紹了如何解決vue單頁(yè)緩存存在的問(wèn)題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1.css同名覆蓋,解決方法:父組件加上scoped
<style lang="scss" scoped> @import './unbind.scss' </style>
子組件同名樣式加上deep
/deep/ .tabs-row { .items-wrp{ padding-left: .34rem; } .item { margin:0 .12rem .16rem 0; } }
2.事件全局綁定
綁在window或document或body上的事件,切換到下一個(gè)頁(yè)面同樣會(huì)被觸發(fā),需要銷(xiāo)毀,也防止內(nèi)存泄漏,全局綁定的事件如果是公用組件慎用off().on(),因?yàn)榭赡芤玫钠渌慕M件全局綁定的事件被移除
destroyed:返回的時(shí)候會(huì)觸發(fā),防止返回到上一頁(yè)時(shí)window上scroll被觸發(fā),官網(wǎng)上是推薦在beforeDestroy做事件移除或者新增DOM或移動(dòng)DOM操作
deactivated:前進(jìn)到新頁(yè)面時(shí)會(huì)觸發(fā),防止進(jìn)入下一頁(yè)時(shí)window上scroll被觸發(fā)
activated:被緩存的頁(yè)面激活,即返回時(shí)被觸發(fā),created此時(shí)不會(huì)被觸發(fā),重新綁定事件
activated () { // 不直接綁定scroll,此處有限制 this.bindEvent() }, destroyed () { $(window).off('scroll', this.handleScrollFn) }, deactivated () { $(window).off('scroll', this.handleScrollFn) },
3.音頻續(xù)播
當(dāng)音頻在還在播放時(shí),跳轉(zhuǎn)到新的頁(yè)面,此時(shí)音頻仍在播放,解決方法:前進(jìn)到新頁(yè)面會(huì)觸發(fā)deactivated鉤子,此時(shí)暫停音頻播放
deactivated () { // 前進(jìn)時(shí)暫停音頻播放 this.pauseAudio() }, methods: { pauseAudio () { this.$refs.audioPlayer && this.$refs.audioPlayer.togglePlay() } }
當(dāng)音頻在還在播放時(shí),返回上一頁(yè),此時(shí)音頻仍在播放,解決方法:返回會(huì)觸發(fā)destroyed鉤子里邊關(guān)閉音頻播放器
destroyed () { this.closeMini() //關(guān)閉音頻播放器 }, methods: { closeMini () { this.mode = -1 this.play = false if (this.player) { this.player.pause() } this.$emit('callback', 'close') }, }
4.微信分享數(shù)據(jù)未更新
當(dāng)返回上一頁(yè)時(shí),分享的數(shù)據(jù)沒(méi)有更新,需要在激活的鉤子里再次讀取之前存的分享數(shù)據(jù)
activated () { // 單頁(yè)緩存分享數(shù)據(jù)重置 this.setShare(this.shareCache) window.addEventListener('scroll', this.finishReading) }, methods: { setShare (opt) { if (!opt) return baike.setShare && baike.setShare(opt) //存該頁(yè)的分享數(shù)據(jù) this.shareCache = opt }, }
5.router.afterEach里上報(bào)pv時(shí)url未更新
在導(dǎo)航守衛(wèi)afterEach里邊上報(bào),但是被觸發(fā)時(shí)url還未更新,導(dǎo)致上報(bào)的參數(shù)有誤,解決方法:通過(guò)to,from得到下一頁(yè),上一頁(yè)的地址
var referrer = !from.name ? document.referrer : `${location.origin}${from.fullPath}` // 通過(guò)from.name判斷刷新 var curUrl = `${location.origin}${to.fullPath}` || ''
6.hash改變時(shí)并不會(huì)觸發(fā)router的守衛(wèi)
代碼中通過(guò)hash改變,監(jiān)聽(tīng)hashchange來(lái)處理之后的邏輯,但是就不會(huì)觸發(fā)router的導(dǎo)航守衛(wèi),也就是沒(méi)有跳轉(zhuǎn),就不存在單頁(yè)緩存
window.location.hash = '#refer'
解決辦法:用replace替換url,相應(yīng)的原來(lái)hashchange就不會(huì)監(jiān)聽(tīng)到,需要把這塊邏輯拿到created里邊執(zhí)行
this.$router.replace({path: `${location.pathname}${location.search}#refer`})
7.分享問(wèn)題修復(fù)
單頁(yè)緩存導(dǎo)致返回時(shí)分享的鏈接和自定義文案沒(méi)有更新,針對(duì)特別處理的分享數(shù)據(jù),在業(yè)務(wù)頁(yè)面修改,解決方法
activated () { this.setShare(this.shareCache) }, methods: { setShare (opt) { if (!opt) return // xx.setShare封裝的分享的底層方法 xx.setShare && xx.setShare(opt) this.shareCache = opt } }
針對(duì)普通分享頁(yè)面,在router.afterEach里加
router.afterEach((to, from) => { Vue.nextTick(() => { if (to.meta.notNeedShare) { //不需要分享的頁(yè)面在路由配置文件里增加{meta: {notNeedShare:true}} if (window.WeixinJSBridge) { window.WeixinJSBridge.call('hideOptionMenu') } else { document.addEventListener('WeixinJSBridgeReady', () => { window.WeixinJSBridge.call('hideOptionMenu') }) } } else { // 非分享自定義數(shù)據(jù)的頁(yè)面處理 xx.setShare({ link: `${location.origin}${to.fullPath}` }) } }) })
8.關(guān)注,收藏等toast提示在返回時(shí)未消失,因?yàn)檠舆t時(shí)間設(shè)置,解決方法:在路由鉤子里邊強(qiáng)制隱藏
router.afterEach((to, from) => { // 切換路由,有toast提示立刻隱藏 xx.toast.hide() })
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決vue單頁(yè)緩存存在的問(wèn)題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
名稱(chēng)欄目:如何解決vue單頁(yè)緩存存在的問(wèn)題-創(chuàng)新互聯(lián)
文章分享:http://chinadenli.net/article38/dchdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣、軟件開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容