1. 程式人生 > >vue單頁應用做多頁應用發生的一些釘子(奇葩需求)

vue單頁應用做多頁應用發生的一些釘子(奇葩需求)

需求:微信公眾號,可以從外部微信選單點選分別進入每個單個頁面,並且進入後頁面還有自己的獨立一套選單。內部選單和外部選單完全一致。

技術:單頁vue,

坑:1.“/”重定向頁面的處理。

       2. 路由地址的獲取 

       3.大坑,單頁應用跳轉外部連結,返回時,處理不當,會多增加一次歷史記錄history,這個是最頭疼的

解決辦法:

        1.如果說你的專案沒有首頁這種概念,“/”重定向的頁面只就需要特別注意了,我們需要用this.$router.replace來代替this.$router.push,replace這個東西是一個大殺器,關鍵時刻真的管用,公眾號點選進來的時候,如果你的“/”有設定,在返回的時候,從你的指定頁面先到“/”的頁面,再按一次返回才能退出到公眾號頁面。所以,在這種需求下,我們的“/”通常設定一個空白頁來進行承載replace倒退的那一步history。

         2.由於從公眾號點選進來的時候我們要獲取路由url,並且在頁面內部還可以獨立點選選單更改url,這就有難度了,我們可以把頁面選單id通過本地儲存存起來,從公眾號進來的時候如何獲取路由呢?可以當做引數加在?後面。

         3.單頁應用最頭疼的就是一些瀏覽器的history,為了破解這些硬bug,我們要一步一步搞清楚bug的起因經過結果,單頁應用跳轉外部連結後,我們需要返回,在返回的時候,雖然走的是瀏覽器的history,但是我們的單頁也會從app.vue載入一次,這樣就造成了兩步history,解決辦法是在路由分配時不要用push,用replace,來使得多餘的history被清除,這樣的話,在移動端的退出邏輯就沒有什麼bug了。這裡要說明的是,“/”這個頁面是很重要的,重定向頁面決定了你的前進後退,因為瀏覽器不支援單頁應用的前進後退,所以每次從app.vue進來的時候,都會額外增加一次history。