Menu
official logo 75*75

地瓜大的飛翔旅程

點數旅行 留學 信用卡 程式學習

Menu
Facebook Twitter Feed GitHub LinkedIn YouTube Instagram

Primary Menu

Skip to content
  • 熱門文章目錄 Popular Posts
  • 懶人包 Dummies
    • 二日遊系列 Two-day Trip
    • 機場貴賓室 Airport lounge
    • 飛行體驗 Flight
    • 飛行過夜包 Amenity Kit
    • 英國留學 Study In UK
    • 獎勵機票兌換實戰 Redeem Flight Awards
    • 美國嘉信 CharlesSchwab
    • 美國匯豐 HSBC US
    • 美國德美利 TD Ameritrade
    • 英國匯豐 HSBC UK
    • 香港匯豐 HSBC HK
  • 工程師之路 Learning Programming
  • 關於作者 About
    • Impressum
    • Privacy Policy
Search

Secondary Menu

Skip to content
  • 旅店 Hotel
  • 亞洲 Asia
    • 日本 Japan
    • 台灣 Taiwan
    • 泰國 Thailand
  • 歐洲 Europe
    • 德國 Deutschland
    • 法國 France
    • 匈牙利 Hungary
    • 冰島 Iceland
    • 捷克 Czech Republic
    • 義大利 Italy
    • 西班牙 Spain
    • 英國 United Kingdom
    • 歐洲其他國家 Other European Countries
  • 美洲 America
  • 指南 Guide
    • 語言學習 Language Learning
    • 科技 Technology
    • 投資 Investment
    • 證書 Certificate
  • 食記 Food
  • 雜學 Trivia
    • 日記 Diary
    • 電影 Movie
    • 點數 Points
    • 開箱 Unboxing

[筆記] Vue Router & Vuex 合用解決動態路由和重新整理刷新問題

Posted on2021-11-272021-11-17AuthorANDY LIEN

章節連結
  • 所需套件
  • 重點和邏輯
  • 程式碼
  • 參考資料

Vue 的前端開發專案,若遇上要進行路徑的權限管理,這時候便讓單純的 Vue Router 添增了不少判斷條件和保存當前狀態。這邊筆記下利用 Vue-Router 和 Vuex 來解決動態路由和重新整理刷新問題,同時提點一些要注意的地方。
vue.js logo vue


所需套件

  • Vue 2
  • vuex-persistedstate
  • vue-router

重點和邏輯

1. Vue Router 有額外新增路由的方法 – router.addRoute。router.addRoutes 已經棄用,若你有一個以上的路由要新增,你可以跑 forEach 來解決
2. Vue Router 執行 router.addRoute 時,會中斷現有的 next() 的功能,造成後續的跳轉錯誤。
3. 檢查位置是在 router.beforeEach() 函式中
4. next() 不帶參數時,會解開 hook 往下運行,因此只會執行一次 Navigation Guard
5. next({…}) 有參數,會放棄該次 navigation 進行重新導向 ( redirect )
6. 綜合 3. 和 4. 兩點,你必須要每個路徑無論有無重新導向,最終有個 next() 的出口,否則就跳不出迴圈
7. vuex 內需要儲存當下動態路由頁面的 Object,記得要用 cloneDeep 深拷貝,否則會出現 Reference 錯誤
8. vuex-persistedstate 需要保存 vuex 中動態路由頁面的 Object 所存的變數
9. 當第一次載入頁面 ( 如 Login 頁面,F5 重新載入、新開分頁…等 ),都會重新拉取一次動態路由。

  • 若 vuex 中沒有儲存先前動態路由頁面的內容,或是在同個 Tab 進行切換,那就視同一般頁面跳轉
  • 若 vuex 中有儲存先前動態路由頁面的內容,但採用「新開 Tab」的方式開啟連結,那就以新開分頁中的網址與比對到的動態路由來當作終點,並帶上原有網址列中的參數,再藉由 next({…to, replace:true}) 的方式重新導向。
  • 若使用者重新整理頁面,一樣會透過網址列來比對動態路由來當作終點,再藉由 next({…to, replace:true}) 的方式重新導向

10. 在 Login 頁面觸發跳轉到首頁,不免俗的會發生跳轉到兩次相同頁面的情形 ( 要跳轉到首頁→拉取動態路由載入→藉由 next(‘首頁’) 避免 navigation cancelled error → 再導向一次首頁 )。這樣一來,依照 Vue Router 原先的設定是會報錯的,於是便修改原本 Vue Router 中的 push 方法,將其 error 給隱藏。
11. 當使用者因為沒有登入被自動導到登入頁時,會將之前的網址記錄下來。接著當使用者完成登入,在要載入首頁之前做檢查。如果有先前的網址,那就將 next 的導向做轉換。
12. 當多 Tabs 開啟並在其中一頁執行登出後,由於其他 Tab 狀態不會同步,在每次登入、登出動作後要額外取一個 key 來記錄。當這個 key 為 true 的時候,那麼就在該 tab 執行 logout 動作,並修改原先預設的登入狀態。


程式碼


參考資料

1. vue动态增加路由addRoute
2. vue-router 报错:Navigation cancelled from“/…“ to “/…“ with a new navigation.
3. [Vue] Vue Router 使用 Navigation Guard 加入查詢參數
4. Vue動態路由配置
5. vue router 报错: Uncaught (in promise) NavigationDuplicate{_name: “NavigationDuplicated”} 解决方案

按讚加入粉絲團

延伸閱讀

  • [筆記] TypeScript 之 enum 生成其所有 value 的集合
  • [筆記] 程式必修課!離散數學與演算法 – 142
  • [筆記] 程式必修課!離散數學與演算法 – 141
  • [筆記] 程式必修課!離散數學與演算法 – 140
  • [筆記] 程式必修課!離散數學與演算法 – 138

Categories程式語言 Programming Language, 筆記 Notes, 網頁開發 Web DevelopmentTagspersistence, vue, vue reload page, vue-router, vuex, vuex in router, vuex login, vuex refresh, vuex vue-router

文章導覽

← Previous Previous post: [筆記] 超新手也能用 Python 爬蟲打造貨比千家的比價網站 – 將資料存到資料庫系統中
Next → Next post: [住宿] 台北 林口 機場捷運 A9 站旁 福朋喜來登

Google 站內搜尋

GA4瀏覽人氣

  • 線上人數:6
  • 昨日人氣:329
  • 本月人氣:47,900
  • 上月人氣:19,353
  • 本年人氣:339,495
  • 累積人氣:2,051,283

GA4熱門文章




    Google 熱門關鍵字

    • 在國外接電話要錢嗎(1512/8162/3.8)
    • 國外接電話要錢嗎(814/2305/2.3)
    • 國際電話誰付錢(501/2453/2.5)
    • 人在國外接電話(489/1666/2.6)
    • traditional chinese ime is not ready yet(467/3519/10.3)
    • 國外接電話(442/2217/4.8)
    • 在國外接電話費用(417/2609/4.7)
    • ana pay 教學(415/2855/5.8)
    • traditional chinese ime is not ready yet解決方法(391/1509/4.1)
    • 在國外接電話(386/1440/3.7)
    • 國際電話 誰付費(343/1297/2.4)
    • 接國際電話(291/980/2.8)
    • 接國際電話要錢嗎(279/6637/5.9)
    • ana pay(263/7496/9.0)
    • t card開卡(241/622/2.0)
    • br71(239/22289/8.5)
    • 接聽國際電話(188/473/1.3)
    • ime已停用(187/12750/8.4)
    • 國外接電話 費用(185/987/5.2)
    • 維珍航空註冊教學(179/369/2.1)
    • ana pay申請教學(170/747/5.3)
    • 接國外電話要付錢嗎(165/4359/4.6)
    • ime is not ready yet解決方法(150/397/3.4)
    • 接國際電話要付費嗎(150/2934/5.3)
    • 國際電話 付費(135/350/2.4)
    • 國外 接電話(133/568/6.2)
    • rimowa吊牌刻字(123/536/2.6)
    • 國際電話 誰付錢(122/397/2.5)
    • 國際電話誰付費(117/412/2.3)
    • line page poker(116/894/5.1)

    好站推薦

    優雅筆寄
    網站狂人
    嘿!部落!

    CC授權標示

    創用 CC 授權條款
    本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.

    Written-By-Human-Not-By-AI-Badge-white@2x.png

    分類

    Copyright © 2025 地瓜大的飛翔旅程. All Rights Reserved. 隱私權政策 | Catch Responsive by Catch Themes
    • 熱門文章目錄 Popular Posts
    • 懶人包 Dummies
      • 二日遊系列 Two-day Trip
      • 機場貴賓室 Airport lounge
      • 飛行體驗 Flight
      • 飛行過夜包 Amenity Kit
      • 英國留學 Study In UK
      • 獎勵機票兌換實戰 Redeem Flight Awards
      • 美國嘉信 CharlesSchwab
      • 美國匯豐 HSBC US
      • 美國德美利 TD Ameritrade
      • 英國匯豐 HSBC UK
      • 香港匯豐 HSBC HK
    • 工程師之路 Learning Programming
    • 關於作者 About
      • Impressum
      • Privacy Policy
    • 旅店 Hotel
    • 亞洲 Asia
      • 日本 Japan
      • 台灣 Taiwan
      • 泰國 Thailand
    • 歐洲 Europe
      • 德國 Deutschland
      • 法國 France
      • 匈牙利 Hungary
      • 冰島 Iceland
      • 捷克 Czech Republic
      • 義大利 Italy
      • 西班牙 Spain
      • 英國 United Kingdom
      • 歐洲其他國家 Other European Countries
    • 美洲 America
    • 指南 Guide
      • 語言學習 Language Learning
      • 科技 Technology
      • 投資 Investment
      • 證書 Certificate
    • 食記 Food
    • 雜學 Trivia
      • 日記 Diary
      • 電影 Movie
      • 點數 Points
      • 開箱 Unboxing
    • facebook
    • Instagram
    • 站長嚴選推薦
    • GOTOP
    Blogimove部落格搬家技術服務