Vue Router的常用API有哪些?

文章目錄

      • 一、路由配置相關
      • 二、路由實例方法(`router` 實例)
      • 三、組件內路由 API(`useRouter` / `useRoute`)
      • 四、導航守衛(路由攔截)
      • 五、路由視圖與導航組件
      • 六、其他常用 API
      • 七、history模式和hash模式有什么區別?
        • 1. URL 格式不同
        • 2. 底層實現原理不同
        • 3. 服務器配置要求不同
        • 4. 功能限制不同
        • 5、如何選擇?
        • 6、模式切換方式

Vue Router 是 Vue 官方的路由管理庫,提供了豐富的 API 用于處理路由配置、導航控制、參數傳遞等功能。以下是其常用 API 的分類整理:

一、路由配置相關

  1. createRouter
    創建路由實例的核心函數,接收 historyroutes 配置:

    import { createRouter, createWebHistory } from 'vue-router'
    const router = createRouter({history: createWebHistory(), // 路由模式routes: [/* 路由規則數組 */]
    })
    
  2. createWebHistory / createWebHashHistory
    定義路由模式:

    • createWebHistory():HTML5 History 模式(無 #,需服務端配置)
    • createWebHashHistory():Hash 模式(帶 #,無需服務端配置)
  3. 路由規則配置(routes 數組元素)
    每個路由對象的常用屬性:

    • path:路由路徑(如 /home
    • name:路由名稱(用于命名路由跳轉)
    • component:對應組件(如 Home
    • children:嵌套路由(子路由配置)
    • props:是否將路由參數轉為組件 props(true / 對象 / 函數)
    • meta:自定義元數據(如 { requiresAuth: true } 用于權限控制)

二、路由實例方法(router 實例)

  1. router.push()
    導航到新路由(類似 window.location.href):

    // 字符串路徑
    router.push('/home')
    // 命名路由 + 參數
    router.push({ name: 'user', params: { id: 1 } })
    // 查詢參數
    router.push({ path: '/search', query: { q: 'vue' } })
    
  2. router.replace()
    導航到新路由,但不會向歷史記錄添加新條目(替換當前記錄):

    router.replace('/about')
    
  3. router.go(n)
    操作歷史記錄(類似 window.history.go(n)):

    router.go(1)  // 前進一頁
    router.go(-1) // 后退一頁
    
  4. router.addRoute() / router.removeRoute()
    動態添加/刪除路由:

    // 添加路由
    router.addRoute({ path: '/new', component: NewComponent })
    // 刪除路由(通過名稱)
    router.removeRoute('new')
    

三、組件內路由 API(useRouter / useRoute

  1. useRouter()
    在組件中獲取路由實例(用于調用導航方法):

    import { useRouter } from 'vue-router'
    const router = useRouter()
    const goHome = () => router.push('/home')
    
  2. useRoute()
    在組件中獲取當前路由信息對象(包含路徑、參數等):

    import { useRoute } from 'vue-router'
    const route = useRoute()
    // 當前路徑
    console.log(route.path)
    // 路由參數(params)
    console.log(route.params.id)
    // 查詢參數(query)
    console.log(route.query.q)
    // 元數據
    console.log(route.meta.requiresAuth)
    

四、導航守衛(路由攔截)

  1. 全局守衛

    • router.beforeEach((to, from, next) => { ... })
      路由跳轉前觸發(常用于登錄鑒權):
      router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isLogin) {next('/login') // 未登錄則跳轉到登錄頁} else {next() // 允許跳轉}
      })
      
    • router.afterEach((to, from) => { ... })
      路由跳轉后觸發(常用于頁面標題設置)。
  2. 路由獨享守衛
    在路由規則中定義 beforeEnter

    {path: '/admin',component: Admin,beforeEnter: (to, from, next) => {// 僅對當前路由生效的攔截邏輯}
    }
    
  3. 組件內守衛
    組件內定義的路由鉤子:

    • beforeRouteEnter:進入組件前觸發(此時組件實例未創建,無 this
    • beforeRouteUpdate:組件復用(路由參數變化)時觸發
    • beforeRouteLeave:離開組件前觸發(常用于未保存數據提示)

五、路由視圖與導航組件

  1. <router-view>
    路由出口,用于渲染匹配的組件:

    <!-- 基礎用法 -->
    <router-view />
    <!-- 命名視圖(用于同時渲染多個組件) -->
    <router-view name="sidebar" />
    
  2. <router-link>
    路由導航組件(生成 <a> 標簽,避免頁面刷新):

    <!-- 基礎用法 -->
    <router-link to="/home">首頁</router-link>
    <!-- 命名路由 -->
    <router-link :to="{ name: 'user', params: { id: 1 } }">用戶</router-link>
    <!-- 替換當前歷史記錄 -->
    <router-link to="/about" replace>關于</router-link>
    

六、其他常用 API

  • router.resolve():解析路由地址,返回路由信息對象。
  • router.hasRoute():檢查路由是否存在(通過名稱)。
  • router.getRoutes():獲取所有路由記錄的數組。
  • scrollBehavior:路由跳轉時的滾動行為配置(在 createRouter 中定義)。

七、history模式和hash模式有什么區別?

Vue Router 中的 history 模式和 hash 模式是兩種不同的路由實現方式,主要區別體現在 URL 格式、底層原理、服務器配置等方面,具體如下:

1. URL 格式不同
  • hash 模式(默認):
    URL 中包含 # 符號,# 后面的部分為路由路徑。例如:
    http://example.com/#/homehttp://example.com/#/user/123
    # 及其后面的內容不會被發送到服務器,僅用于客戶端路由解析。

  • history 模式
    URL 中不包含 #,使用標準的 HTML5 History API 實現。例如:
    http://example.com/homehttp://example.com/user/123
    看起來更接近傳統的 URL,視覺上更友好。

2. 底層實現原理不同
  • hash 模式
    基于瀏覽器的 hashchange 事件實現。當 # 后面的路徑變化時,瀏覽器不會重新請求頁面,但會觸發 hashchange 事件,Vue Router 監聽該事件并切換對應組件。
    優點:兼容性好(支持所有現代瀏覽器及 IE8+),無需服務器配置。

  • history 模式
    基于 HTML5 的 history.pushState()history.replaceState() 方法(屬于 History API)。這些方法可以在不刷新頁面的情況下修改瀏覽器歷史記錄,Vue Router 通過監聽歷史記錄變化實現路由切換。
    優點:URL 更美觀,符合用戶對 URL 的直觀認知。
    缺點:兼容性稍差(僅支持 IE10+),且需要服務器配合配置。

3. 服務器配置要求不同
  • hash 模式
    無需特殊配置。因為 # 后面的內容不會發送到服務器,無論訪問 http://example.com/#/home 還是 http://example.com/#/user,服務器實際收到的請求都是 http://example.com/,只需返回單頁應用的入口 HTML 即可。

  • history 模式
    必須配置服務器。因為當用戶直接訪問 http://example.com/user 時,瀏覽器會向服務器發送該路徑的請求,若服務器未配置對應路由,會返回 404 錯誤。
    解決方法:服務器需將所有路由請求重定向到單頁應用的入口 HTML(如 index.html)。
    示例配置(Nginx):

    location / {try_files $uri $uri/ /index.html;
    }
    
4. 功能限制不同
  • hash 模式

    • # 后面的內容無法作為 HTTP 請求的一部分,因此不利于 SEO(搜索引擎可能忽略 # 后的內容)。
    • 不能使用 history.go(n) 等方法精確控制歷史記錄(但日常使用影響不大)。
  • history 模式

    • 支持 history.state 存儲額外數據,可在路由跳轉時傳遞更多信息。
    • 可以使用 popstate 事件監聽歷史記錄變化,實現更靈活的導航控制。
    • URL 更利于 SEO 和分享(無 # 符號,更符合常規 URL 規范)。
5、如何選擇?
  • 若項目需要兼容舊瀏覽器(如 IE9 及以下),或不想配置服務器,選擇 hash 模式
  • 若追求更美觀的 URL、更好的 SEO 支持,且能配置服務器,選擇 history 模式(推薦現代項目使用)。
6、模式切換方式

在創建路由實例時指定模式:

import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'// hash 模式
const router = createRouter({history: createWebHashHistory(), // 使用 hash 模式routes: [...]
})// history 模式
const router = createRouter({history: createWebHistory(), // 使用 history 模式routes: [...]
})

總結:兩種模式核心功能一致,但 history 模式在 URL 美觀性和功能擴展性上更優,而 hash 模式在兼容性和部署便捷性上更有優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93782.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從現場到云端的“通用語”:Kepware 在工業互聯中的角色、使用方法與本土廠商(以胡工科技為例)的差異與優勢

從現場到云端的“通用語”&#xff1a;Kepware 在工業互聯中的角色、使用方法與本土廠商&#xff08;以胡工科技為例&#xff09;的差異與優勢 文章目錄從現場到云端的“通用語”&#xff1a;Kepware 在工業互聯中的角色、使用方法與本土廠商&#xff08;以胡工科技為例&#x…

深入理解Prompt構建與工程技巧:API高效實踐指南

深入理解Prompt構建與工程技巧&#xff1a;API高效實踐指南 引言 Prompt&#xff08;提示&#xff09;工程是推動大模型能力極限的關鍵手段。合理的Prompt不僅能顯著提升模型輸出的相關性與準確性&#xff0c;在實際落地的API接口開發中同樣起到舉足輕重的作用。本文將系統介…

C++之多態(從0到1的突破)

世間百態&#xff0c;每個人都扮演著不同的角色&#xff0c;都進行著不同的行為。C更是如此&#xff0c;C中也會出現有著不同行為的多種形態的出現&#xff0c;那就讓我們一起進入C的多態世界吧&#xff01;&#xff01;&#xff01; 一. 多態的概念 多態&#xff0c;顧名思義&…

路由器NAT的類型測定

目前所使用的NAT基本都是NAPT&#xff0c;即多端口的NAT技術&#xff0c;因此本文主要是設計了兩種測定路由器NAPT類型的實驗。 實驗環境 設備 主機A&#xff1a;Windows主機B&#xff1a;Windows路由器 軟件 ncWiresharkSocketTools 在局域網內部完成所有測試&#xff0c;完全…

ROS 2系統Callback Group概念筆記

核心概念 Callback Group&#xff08;回調組&#xff09;是一個管理一個或多個回調函數執行規則的容器。它決定了這些回調函數是如何被節點&#xff08;Node&#xff09;的 executor 調度的&#xff0c;特別是當多個回調函數同時就緒時&#xff0c;它們之間是并行執行還是必須串…

Qt——主窗口 mainWindow

主窗口 mainWindow 前面學習的所有代碼&#xff0c;都是基于QWidget控件&#xff0c;其更多的是作為別的窗口的部分 現在來學習QMainWindow&#xff0c;即主窗口&#xff0c;其包含以下屬性 Window Title&#xff1a;標題欄Menu Bar&#xff1a;菜單欄Tool Bar Area&#xff1a…

無訓練神經網絡影響下的智能制造

摘要 未訓練神經網絡&#xff08;Untrained Neural Networks, UNNs&#xff09;作為近年來人工智能領域的新興范式&#xff0c;正在逐步改變智能制造的發展路徑。不同于傳統深度學習依賴大規模標注數據與高性能計算資源的模式&#xff0c;UNNs 借助網絡結構自身的歸納偏置與初…

微服務自動注冊到ShenYu網關配置詳解

一、配置逐行詳解 shenyu:register:registerType: http # 注冊中心類型:使用 HTTP 協議進行注冊serverLists: ${shenyu-register-serverLists} # ShenYu Admin 的地址列表props:username: ${shenyu-register-props-username} # 注冊認證用戶名password: ${shenyu-regi…

時序數據庫IoTDB的列式存儲引擎

在大數據時代&#xff0c;工業物聯網&#xff08;IIoT&#xff09;場景正以前所未有的速度生成著海量的時間序列數據。這些數據通常由成千上萬的傳感器&#xff08;如溫度、壓力、轉速傳感器&#xff09;持續不斷采集產生&#xff0c;它們具備鮮明的特點&#xff1a;數據時間屬…

JavaScript手錄18-ajax:異步請求與項目上線部署

前言&#xff1a;軟件開發流程 AJAX&#xff1a;前端與后端的數據交互 前后端協作基礎 Web應用的核心是“數據交互”&#xff0c;前端負責展示與交互&#xff0c;后端負責處理邏輯與數據存儲&#xff0c;二者通過網絡請求協作。 &#xff08;1&#xff09;項目開發流程與崗…

HTB 賽季7靶場 - Enviroment

最近所幸得點小閑&#xff0c;補個檔嘞&#xff01;~nmap掃描 nmap -F -A 10.10.11.67dirsearch掃描發現login接口 http://environment.htb/login構造如下payload&#xff0c;讓程序報錯&#xff0c;其原理在于缺失了rember后會導致報錯&#xff0c;從而告訴我們一個新的參數ke…

源碼編譯部署 LAMP 架構詳細步驟說明

源碼編譯部署 LAMP 架構詳細步驟說明 一、環境準備 1. 關閉防火墻和SELinux [roothrz ~]# systemctl stop firewalld [roothrz ~]# systemctl disable firewalld [roothrz ~]# setenforce 02. 配置YUM網絡源 [roothrz ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://m…

機器學習----PCA降維

一、PCA是什么&#xff1f;主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是機器學習中最常用的降維技術之一&#xff0c;它通過線性變換將高維數據投影到低維空間&#xff0c;同時保留數據的最重要特征。PCA由卡爾皮爾遜于1901年發明&#x…

ReactNative開發實戰——React Native開發環境配置指南

一、開發前準備 1. macOS平臺基礎工具安裝 brew install node18 brew install watchman brew install cocoapods2. 代理配置 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890# 新增擴展建議&#xff08;可選配置&#xff09; ec…

差速轉向機器人研發:創新驅動的未來移動技術探索

在科技日新月異的今天&#xff0c;機器人技術作為智能制造與自動化領域的核心驅動力&#xff0c;正以前所未有的速度發展。其中&#xff0c;差速轉向機器人以其獨特的運動機制和廣泛的應用前景&#xff0c;成為了科研與工業界關注的焦點。本文旨在探討差速轉向機器人研發進展&a…

Wireshark捕獲電腦與路由器通信數據,繪制波形觀察

一、準備工作 電腦發出數據的波形圖繪制在我的另一篇博客有詳細介紹&#xff1a; 根據Wireshark捕獲數據包時間和長度繪制電腦發射信號波形-CSDN博客 路由器發送給電腦數據的波形圖繪制也在我的另一篇博客有詳細介紹&#xff1a; 根據Wireshark捕獲數據包時間和長度繪制路由…

汽車ECU實現數據安全存儲(機密性保護)的一種方案

一、 綜述在車輛ECU中總是有一些密鑰或重要數據需進行機密性保護&#xff0c;但因產品選型、成本等考慮&#xff0c;導致一些ECU的芯片不支持硬件安全模塊&#xff08;例如HSM、TEE等&#xff09;。此時&#xff0c;為保障數據的機密性&#xff0c;可考慮通過軟件實現數據的安全…

AI 效應: GPT-6,“用戶真正想要的是記憶”

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

云計算學習100天-第25天

部署LNMP環境安裝軟件#在前一天已經安裝nginx的基礎上安裝MariaDB&#xff0c;php和php-fpm yum -y install mariadb mariadb-server mariadb-devel php php-mysqlnd php-fpm #mariadb&#xff08;數據庫客戶端軟件&#xff09;、mariadb-server&#xff08;數據庫服務器軟件&…

細化的 Spring Boot 和 Spring Framework 版本對應關系

注:本文由ai輔助,個人整理,有問題可留言 Spring Boot 3.x 系列 (基于 Spring Framework 6.x) Spring Boot 版本 對應的 Spring Framework 版本 Java 支持版本 3.1.5 (最新) 6.0.15 Java 17+ 3.1.4 6.0.14 Java 17+ 3.1.3 6.0.12 Java 17+ 3.1.2 6.0.11 Java 17+ 3.1.1 6.0.…