web app 單頁應用,是用vue vue-router寫的。
有些頁面是需要禁止後退的,我把目前頁面是否能後退寫在了路由元資訊meta裡面,例如為allowBack。
查到資料 禁止後退的方法是
history.pushState(null, null, location.href)
之前專案用的是vue1.0,解決方法是
1. 在全局的router.beforeEach 里面 判断当前路由的handler里面的allowBack变量是否为false
2. 如果为false 则 history.pushState(null, null, location.href)
現在改用vue2.0, 原來的方法不好使了,
現在的問題是,不知道該把 history.pushState(null, null, location.href) 這段程式碼放在哪裡
或是說 各位大神 有沒有什麼其他的解決方案?謝謝! !
其實主要的使用場景是這樣的,
tabbar點擊切換到不同的頁面,假如我現在在a頁面,點擊tabbar到b頁面,我不能透過返回鍵回到a頁面,但能透過點擊tabbar去a頁面
自問自答.....
需求是:需要某個路由不能透過瀏覽器返回,同時不影響相互之間的切換
整理一下解決方法 和 使用方法:
1.在路由配置中給這個路由添加meta信息,例如:
2.在全域的router.beforeEach 函數裡面取得allowBack的狀態,同時更新vuex的allowBack的值,如:
這段程式碼得寫在next()的後面,因為寫在next()前面location.href並不是to的位址,這點跟vue1.0有點不同
3.接下來就是最核心的了,在app.vue的mounted裡面註冊onpopstate事件:
去掉history.pushState(null, null, location.href) 也能防止後退,但是元件會重新渲染,所以這部分也很關鍵
試試這樣看看