vue-router next(false) 禁止訪問某個(gè)頁面時(shí),不保留歷史訪問記錄問題
用戶正常訪問流程為 產(chǎn)品列表頁面【a頁面】->產(chǎn)品詳情頁面(選擇不同的計(jì)劃價(jià)格因素后點(diǎn)擊購買)【b頁面】->產(chǎn)品購買頁面【c頁面】
下面進(jìn)行如下操作
c頁面 按 <- 返回鍵 返回了b頁面,
而B頁面想通過 -> 前進(jìn)鍵 回到 c頁面。
這樣的操作是不被允許的。
于是
我寫了如下代碼
/** 防止從填寫表單頁面后退之后又前進(jìn),會(huì)丟失之前所選擇的計(jì)劃價(jià)格和價(jià)格因素 */ beforeRouteEnter (to, from, next) { if (from.name === 'orderInput') { sessionStorage.setItem('preventForward', true) } next() }, beforeRouteLeave (to, from, next) { // 如果是從表單填寫頁返回的并且不是通過購買按鈕去往表單填寫頁面 if (to.name === 'orderInput' && sessionStorage.getItem('preventForward') === 'true') { this.showToast('請(qǐng)點(diǎn)擊購買按鈕進(jìn)行購買') next(false) } else { next() } }, method:{ buy(){ sessionStorage.setItem('preventForward', false) } }
但是這個(gè)操作會(huì)有一個(gè)問題,當(dāng)我阻止了一次去往c頁面的操作next(false)之后, 如果在b頁面 按返回鍵, 按我們預(yù)想的,應(yīng)該要返回a頁面。
可這個(gè)時(shí)候,實(shí)際會(huì)返回到 c頁面。
原因就是c頁面雖然被我們阻止了,卻進(jìn)入了歷史棧中, 我想了個(gè)方法來防止這個(gè)被禁止的請(qǐng)求加入到棧中。
也就是在 next(false) 前面加入
this.$router.go(-1)
整體代碼
如下:
beforeRouteEnter (to, from, next) { if (from.name === 'orderInput') { sessionStorage.setItem('preventForward', true) } next() }, beforeRouteLeave (to, from, next) { // 如果是從表單填寫頁返回的并且不是通過購買按鈕去往表單填寫頁面 if (to.name === 'orderInput' && sessionStorage.getItem('preventForward') === 'true') { this.$router.go(-1) this.showToast('請(qǐng)點(diǎn)擊購買按鈕進(jìn)行購買') //這里把next(false)也去掉。兼容移動(dòng)端。否則在微信操作時(shí),會(huì)重復(fù)提醒上面那句話 // next(false) } else { next() } }, method:{ buy(){ sessionStorage.setItem('preventForward', false) } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue用戶長時(shí)間不操作退出到登錄頁的兩種實(shí)現(xiàn)方式
出于安全考慮,用戶長時(shí)間不操作,就回到登錄頁面,讓用戶重新登錄,本文就記錄一下實(shí)現(xiàn)這種效果的兩種方式,具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09詳解如何去除vue項(xiàng)目中的#——History模式
這篇文章主要介紹了詳解如何去除vue項(xiàng)目中的#——History模式 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10Vue3實(shí)現(xiàn)動(dòng)態(tài)面包屑的代碼示例
這篇文章主要給大家介紹一下Vue3動(dòng)態(tài)面包屑是如何實(shí)現(xiàn)的,實(shí)現(xiàn)思路又是什么,以及發(fā)給大家介紹一下面包屑的功能,文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07html中引入Vue.js的cdn實(shí)現(xiàn)簡單的文檔單頁
這篇文章主要為大家介紹了html中引入Vue.js的cdn實(shí)現(xiàn)簡單的文檔單頁示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08vue+ElementUI實(shí)現(xiàn)訂單頁動(dòng)態(tài)添加產(chǎn)品數(shù)據(jù)效果實(shí)例代碼
本篇文章主要介紹了vue+ElementUI實(shí)現(xiàn)訂單頁動(dòng)態(tài)添加產(chǎn)品效果實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Vue.js分頁組件實(shí)現(xiàn):diVuePagination的使用詳解
這篇文章主要介紹了Vue.js分頁組件實(shí)現(xiàn):diVuePagination的使用詳解,需要的朋友可以參考下2018-01-01解決echarts中橫坐標(biāo)值顯示不全(自動(dòng)隱藏)問題
這篇文章主要介紹了解決echarts中橫坐標(biāo)值顯示不全(自動(dòng)隱藏)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07