最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue Router的三種歷史模式應(yīng)用與對比詳解

 更新時(shí)間:2025年10月14日 09:18:39   作者:一只小風(fēng)華~  
在 Vue.js 單頁應(yīng)用(SPA)中,vue-router 提供了三種不同的 歷史模式 來管理路由導(dǎo)航和 URL 顯示方式,每種模式適用于不同場景,下面小編就和大家簡單介紹一下吧

核心概覽

在 Vue.js 單頁應(yīng)用(SPA)中,vue-router 提供了三種不同的 歷史模式 來管理路由導(dǎo)航和 URL 顯示方式。每種模式適用于不同場景,理解其原理與配置是構(gòu)建現(xiàn)代前端應(yīng)用的關(guān)鍵。

模式創(chuàng)建函數(shù)特點(diǎn)SEO 友好服務(wù)器要求
Hash 模式createWebHashHistory()使用 # 分隔真實(shí)路徑與路由信息,兼容性好? 不友好
HTML5 模式createWebHistory()正常 URL 形式,美觀且利于 SEO? 友好需要回退配置
Memory 模式createMemoryHistory()不依賴瀏覽器環(huán)境,適合 SSR 和測試環(huán)境?? 視情況

一、Hash 模式(哈希模式)

基本概念

  • 利用 URL 中的 # 后面的部分(即 hash)來模擬頁面跳轉(zhuǎn)。
  • 瀏覽器不會(huì)將 # 后的內(nèi)容發(fā)送到服務(wù)器,因此無需后端支持。

示例代碼

import { createRouter, createWebHashHistory } from 'vue-router'

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/home', component: Home },
    { path: '/about', component: About }
  ]
})

訪問地址如:https://example.com/#/home

優(yōu)點(diǎn)

  • 兼容老版本瀏覽器(IE9+)
  • 無需服務(wù)器額外配置
  • 開發(fā)調(diào)試方便

缺點(diǎn)

  • URL 不美觀,帶有 #
  • 對 SEO 不友好(搜索引擎可能忽略 hash 內(nèi)容)

二、HTML5 模式(瀏覽器歷史記錄模式)

 基本概念

使用 HTML5 的 history.pushState() API 實(shí)現(xiàn)真實(shí)的 URL 路徑。

URL 更加“正常”,例如:https://example.com/user/123

示例代碼

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/user/:id', component: UserComponent }
  ]
})

關(guān)鍵問題:404 錯(cuò)誤

當(dāng)用戶直接訪問 /user/123 時(shí),請求會(huì)發(fā)送給服務(wù)器。如果服務(wù)器沒有對應(yīng)資源,則返回 404。

解決方案:Fallback 回退機(jī)制

所有非靜態(tài)資源請求都應(yīng)返回 index.html,交由前端路由處理。

常見服務(wù)器配置示例:

服務(wù)器:nginx

配置方法

location / {
  try_files $uri $uri/ /index.html;
}

Apache 

| Express (Node.js) | 使用中間件:

const history = require('connect-history-api-fallback');
app.use(history());

| Firebase Hosting | 在 firebase.json 添加:

{
  "hosting": {
    "rewrites": [
      { "source": "**", "destination": "/index.html" }
    ]
  }
}

| Netlify | 創(chuàng)建 _redirects 文件:

/* /index.html 200

| Vercel | 創(chuàng)建 vercel.json

{ "rewrites": [{ "source": "/:path*", "destination": "/index.html" }] }

優(yōu)點(diǎn)

  • URL 美觀,符合現(xiàn)代 Web 標(biāo)準(zhǔn)
  • 利于 SEO 優(yōu)化
  • 用戶體驗(yàn)更自然

缺點(diǎn)

  • 必須配合服務(wù)器正確配置
  • 配置不當(dāng)會(huì)導(dǎo)致 404

三、Memory 模式(內(nèi)存模式)

基本概念

將路由狀態(tài)保存在內(nèi)存中,不依賴瀏覽器的 URL 或歷史棧。

完全由 JavaScript 控制導(dǎo)航。

示例代碼

import { createRouter, createMemoryHistory } from 'vue-router'

const router = createRouter({
  history: createMemoryHistory(),
  routes: [
    { path: '/login', component: LoginComponent }
  ]
})

// 手動(dòng)觸發(fā)初始導(dǎo)航(必須?。?
router.push('/login')

適用場景

  • 服務(wù)端渲染(SSR)
  • Node.js 后端環(huán)境
  • 單元測試或自動(dòng)化腳本
  • 移動(dòng)端 WebView 或 Electron 應(yīng)用(可選)

注意事項(xiàng)

  • 瀏覽器中無法使用前進(jìn)/后退按鈕
  • 頁面刷新后路由狀態(tài)丟失
  • URL 不更新,不利于分享

補(bǔ)充知識點(diǎn):處理 404 頁面

由于 HTML5 模式下所有路徑都被重定向到 index.html,服務(wù)器不再返回 404,因此需要在前端實(shí)現(xiàn)通用匹配路由。

前端萬能路由配置

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
  // 通配符路由必須放在最后
  { path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFoundComponent }
]

也可以解構(gòu)參數(shù):

// 訪問 /not-found 時(shí)
this.$route.params.pathMatch // "not-found"

更佳實(shí)踐(SSR 場景)

在服務(wù)端預(yù)先用路由器匹配 URL:

  • 匹配成功 → 渲染頁面
  • 匹配失敗 → 返回 HTTP 404 狀態(tài)碼

查看 Vue SSR 文檔 獲取更多細(xì)節(jié)。

對比圖表:三種歷史模式一覽表

特性Hash 模式HTML5 模式Memory 模式
是否改變真實(shí) URL否(僅改 hash)
是否需要服務(wù)器配置
支持前進(jìn)/后退否(除非手動(dòng)模擬)
SEO 友好性取決于上下文
適用環(huán)境瀏覽器瀏覽器瀏覽器 / SSR / 測試 / Node
URL 示例/#/user/1/user/1(無變化)
初始化是否需手動(dòng) push?

知識點(diǎn)詳解

下列為解決上述內(nèi)容所涉及的核心知識點(diǎn):

1.HTML5 History API

通過 $window.history.pushState() 動(dòng)態(tài)修改 URL 而不刷新頁面,是實(shí)現(xiàn) HTML5 模式的基礎(chǔ)。它允許 SPA 擁有“真實(shí)”路徑。

2.URL 重寫與回退機(jī)制

服務(wù)器需配置將所有未命中靜態(tài)資源的請求指向 index.html,從而交由前端路由處理,避免 404 錯(cuò)誤。

3.通配符路由匹配

使用 /:pathMatch(.*)* 捕獲任意未知路徑,在前端展示 404 頁面,彌補(bǔ)服務(wù)器回退帶來的錯(cuò)誤掩蓋問題。

總結(jié)建議

使用場景推薦模式理由
普通生產(chǎn)環(huán)境 Web 應(yīng)用? HTML5 模式更好的用戶體驗(yàn)和 SEO
快速開發(fā)、演示或無后端支持項(xiàng)目? Hash 模式零配置,開箱即用
SSR、測試、Node.js 環(huán)境? Memory 模式獨(dú)立于瀏覽器環(huán)境,便于控制
移動(dòng) Hybrid 應(yīng)用?? Hash 或 Memory根據(jù)容器能力選擇

附加提示

若部署在子目錄(如 /my-app/),記得設(shè)置 base: '/my-app/'

const router = createRouter({
  history: createWebHistory('/my-app/'),
  routes: [...]
})

構(gòu)建工具(Vue CLI / Vite / Nuxt)通常已集成相關(guān)插件,但仍需手動(dòng)配置服務(wù)器規(guī)則。

使用 CI/CD 部署時(shí),確保 _redirectsvercel.json 等文件包含在構(gòu)建輸出中。

到此這篇關(guān)于Vue Router的三種歷史模式應(yīng)用與對比詳解的文章就介紹到這了,更多相關(guān)Vue Router歷史模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 需求 data中的數(shù)據(jù)之間的調(diào)用操作

    vue 需求 data中的數(shù)據(jù)之間的調(diào)用操作

    這篇文章主要介紹了vue 需求 data中的數(shù)據(jù)之間的調(diào)用操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue3本地打包啟動(dòng)出現(xiàn)白屏的解決思路詳解

    Vue3本地打包啟動(dòng)出現(xiàn)白屏的解決思路詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3本地打包啟動(dòng)時(shí)出現(xiàn)白屏的解決思路,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • vue實(shí)現(xiàn)標(biāo)簽云效果的方法詳解

    vue實(shí)現(xiàn)標(biāo)簽云效果的方法詳解

    這篇文章主要介紹了vue實(shí)現(xiàn)標(biāo)簽云效果的方法,結(jié)合實(shí)例形式詳細(xì)分析了vue標(biāo)簽云的實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • vue2+elementui上傳照片方式(el-upload超簡單)

    vue2+elementui上傳照片方式(el-upload超簡單)

    這篇文章主要介紹了vue2+elementui上傳照片方式(el-upload超簡單),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue項(xiàng)目中常用的實(shí)用技巧匯總

    Vue項(xiàng)目中常用的實(shí)用技巧匯總

    如果說是JQuery是手工作坊,那么Vue.js就像是一座工廠,雖然Vue.js做的任何事情JQuery都可以做,但無論是代碼量還是流程規(guī)范性都是前者較優(yōu),這篇文章主要給大家匯總介紹了關(guān)于Vue項(xiàng)目中常用的實(shí)用技巧,需要的朋友可以參考下
    2021-07-07
  • vue 實(shí)現(xiàn)單選框設(shè)置默認(rèn)選中值

    vue 實(shí)現(xiàn)單選框設(shè)置默認(rèn)選中值

    今天小編就為大家分享一篇vue 實(shí)現(xiàn)單選框設(shè)置默認(rèn)選中值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue+jquery+lodash實(shí)現(xiàn)滑動(dòng)時(shí)頂部懸浮固定效果

    vue+jquery+lodash實(shí)現(xiàn)滑動(dòng)時(shí)頂部懸浮固定效果

    這篇文章主要為大家詳細(xì)介紹了vue+jquery+lodash實(shí)現(xiàn)滑動(dòng)時(shí)頂部懸浮固定效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Vue的Props實(shí)例配置詳解

    Vue的Props實(shí)例配置詳解

    props主要用于組件的傳值,他的工作就是為了接收外面?zhèn)鬟^來的數(shù)據(jù),與data、el、ref是一個(gè)級別的配置項(xiàng),下面這篇文章主要給大家介紹了關(guān)于Vue組件如何設(shè)置Props的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 詳解Vuex的屬性和作用

    詳解Vuex的屬性和作用

    這篇文章主要為大家介紹了Vuex的屬性和作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Vue頁面生成PDF的最佳方法推薦

    Vue頁面生成PDF的最佳方法推薦

    公眾中經(jīng)常會(huì)有這種場景,一些合同、協(xié)議等的頁面需要進(jìn)行下載,而且需要和頁面保持一致,下面這篇文章主要給大家介紹了關(guān)于Vue頁面生成PDF的最佳方法,需要的朋友可以參考下
    2022-05-05

最新評論

景洪市| 建德市| 松原市| 玉田县| 应城市| 吉木乃县| 青龙| 偃师市| 宾阳县| 翁源县| 剑河县| 黑水县| 靖远县| 财经| 娄烦县| 浦东新区| 松阳县| 临安市| 南通市| 阿拉善右旗| 安多县| 黔西县| 监利县| 洪泽县| 哈密市| 武宣县| 报价| 炎陵县| 莱州市| 出国| 咸阳市| 辽源市| 札达县| 清丰县| 萨迦县| 明光市| 玉门市| 赣榆县| 太康县| 巴塘县| 台州市|