聊聊vue的兩種路由模式(哈希和歷史)
路由器分別有兩種模式:一種是hash
模式、另一種是history
模式,在使用vue -cli
以及vue-router
預設搭建的vue
項目,如果不做特殊的配置,預設就是hash
模式
這兩種模式各有自己的優勢,但他們的使用區別,卻多多少少都會在面試當中被問到
#今天就一起來學習下
哈希模式(hash )
vue-router
預設hash
模式,使用url
的雜湊(hash
)來模擬一個完整的URL
,當URL
改變時,頁面不會重新載入。 【相關推薦:vuejs影片教學、web前端開發】
#如下
http://localhost/#home
特點: #號後面的參數不會傳送給伺服器,相容性好,不會作為路徑的一部分發送給伺服器,也就是它不會包括在
HTTP
請求體中,對後端完全沒有影響,只是我們前端同學自己玩
頁面刷新時,會停留在當前頁面,不會重新加載
如果覺得hash
路徑很醜,不簡潔,我們可以用路由的history
模式,這種模式充分利用history.pushState API
或replaceState
,來完成,url
#跳轉而無需重新載入頁面
歷史模式
history
模式:在實例化設定物件中新增mode
模式,值為history
就可以了的
經過改造後,hash
模式就會變成history
模式
const router = new VueRouter({ mode: 'history', routes: [...] })
這兩種方式的使用都是沒啥問題的,如果你在意瀏覽器url
的顏值,#符號摻雜在
url
裡看起來確實有些不優雅
如果你想url
更好看,那麼就使用history
模式
但是:在hash
模式下,使用hash
符號之前的內容會被包含在請求體中,#號後面的不會發送給伺服器
而history
模式下,前端的URL
必須和實際向後端發起請求的URL
保持一致
如:https://itclan.cn/fontend/id
,如果後端缺少沒有對/fontend /id
的路由處理,那麼它將返回404
錯誤
如果你想要支援history
模式,那麼需要後端同學支援,想要徹底解決404的問題,需要與後端同學協商,因為需要後端與前端路由做匹配
在服務端增加一個覆蓋所有情況的時候的候選資源,如果url
符合不到任何靜態資源,應該回傳一個首頁頁面
如果出現404,容易讓使用者覺得這是一個Bug
如何解決前台刷新頁面404問題
解決這個問題:如果你用的是Node
做後端服務,那麼在Node
後台中可以加入一個中間件例如:connect-history -api-fallback
即可解決這種404問題
如果是java
或php
,找後端同學,讓後端路由與前端路由做匹配,或是用Ngnix
做中間代理
如下這段簡易的Node
服務程式碼,可以命名為server.js
,同時安裝express
以及connect-history-api-fallback
中間件
啟動後端服務執行指令node server.js
const express = require('express'); const history = require('connect-history-api-fallback') const app = express() app.use(history()) app.use(express.static(__dirname+'/static')); app.listen(5005,(err)=> { if(!err)consle.log('服务器启动成功了') })
把前端打包產生的dist
檔案內的程式碼,放到static
中,透過這一操作,即可解決刷新頁面,404
的問題
對單頁spa的應用理解
我們的前端使用的vue-router
中的兩種模式,就是單頁應用,整個應用只有一個router
路由器,是可以透過$router
屬性取得到
也就是說,整個應用程式只有一個完整的頁面,同時,點擊頁面中的導航連結,不會刷新頁面,只會是頁面的局部更新
而我們頁面中的資料,往往需要透過ajax
請求來取得
現在開發的新專案,都是前後端分離,基本上都是單頁應用
總結
前端路由,有兩種模式,一種是hash
模式,另一種是history
模式,其中hash
模式是預設模式,#後面的不會傳送給服務端,不會重新刷新載入頁面,而
history
模式,url
雖然比較好看,但是想要完整支援,需要後端同學提供支援,後端路由與前端的路由需要做匹配
否則部署到線上,一刷新頁面,會出現404
的問題
以上是聊聊vue的兩種路由模式(哈希和歷史)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。
