1. 程式人生 > >關於vue-router中點選瀏覽器前進後退位址列路由變了但是頁面沒跳轉

關於vue-router中點選瀏覽器前進後退位址列路由變了但是頁面沒跳轉

情景:

在進行正常頁面跳轉操作後(頁面A跳轉到頁面B),點選瀏覽器的左上角的‘後退’按鈕,點選後,可以看到url地址已經發生了變化(url由頁面B變為頁面A),hash值也已經是上一頁的路由,但是瀏覽器顯示的內容卻沒有發生變化(依舊是頁面B)。

沒有任何報錯(頁面A和頁面B無任何js錯誤或者相容性錯誤)。

若有錯誤也會導致頁面跳轉不成功,頁面依舊是當前頁面,但是控制檯會報ERROR。

但是頁面按瀏覽器重新整理按鈕後,一切又恢復了正常。真的讓人很頭疼,IE,Chrome,fireFox,Edge都是這樣

 

過程:

百度查了很多,就是hash模式導致的,所以重新出發下hashchange事件解決了問題,

具體如下:

 

本地路由配置:

 1 const baseRoute = [
 2   { path: '/login', name: 'login', component: Login },
 3   { path: '/404', name: 'page404', component: page404 },
 4   {path: '/', redirect: '/index', component: Layout, name: 'dashboard'},
 5   {
 6     path: '/',
 7     redirect: '/index',
8 component: Layout, 9 children: [ 10 { 11 path: 'index', 12 name: 'index', 13 component: xxxx, 14 meta: { 15 title: 'xxx', 16 icon: '' 17 } 18 }, 19 { 20 path: 'project', 21 name: 'project',
22 component: xxxx, 23 meta: { 24 dynamic: true, // 動態麵包屑標題 25 title: '' 26 } 27 }, 28 { 29 path: 'project/onlineEquip/debug/:id', 30 name: 'debug', 31 component: Debug, 32 meta: { 33 title: '除錯', 34 level: 3, 35 hidden: true 36 } 37 }, 38 { 39 path: 'project/onlineEquip/detail/:id', 40 name: 'detail', 41 component: Detail, 42 meta: { 43 title: 'xxx', 44 level: 3, 45 hidden: true 46 } 47 }, 48 { 49 path: 'project/log', 50 name: 'log', 51 component: Log, 52 meta: { 53 title: '日誌', 54 level: 2, 55 hidden: true 56 } 57 }, 58 { 59 path: 'project/myPhyModel', 60 name: 'CreateModel', 61 component: xxxxx, 62 meta: { 63 title: 'xxxxx', 64 level: 2, 65 hidden: true 66 } 67 }, 68 { 69 path: 'project/myPhyModel/detail', 70 name: 'ModelDetail', 71 component: xxx, 72 meta: { 73 title: '詳情', 74 level: 3, 75 hidden: true 76 } 77 } 78 ] 79 }, 80 { 81 path: '*', // 頁面不存在的情況下會跳到404頁面 82 redirect: '/404', 83 name: 'notFound', 84 hidden: true 85 } 86 ] 87 const router = new Router({ 88 routes: baseRoute // 這裡預設是hash模式 89 }) 90 91 export default router
View Code

 

解決辦法:

1、vue-router HTML5 History 模式  可以設定為history 模式解決問題

2、在hash模式的前提下來解決, 

  a、首先學習下hash模式的url相關知識 

  

  

  b、對,就是通過onhashchange 事件來解決這個bug

    APP.vue入口中:

    

mounted () {
    // 檢測瀏覽器路由改變頁面不重新整理問題,hash模式的工作原理是hashchange事件
    window.addEventListener('hashchange', () => {
      let currentPath = window.location.hash.slice(1)
      if (this.$route.path !== currentPath) {
        this.$router.push(currentPath)
      }
    }, false)
  },

  

  重新重新整理一遍路由,問題就可以解決啦!