vue-router通過hash與history inte***ce兩種方式實現前端路由,更新檢視但不重新請求頁面」是前端路由原理的核心之一,目前在瀏覽器環境中這一功能的實現主要有兩種方式:
hash:利用url中的hash(「#」)
history:利用history inte***ce在 html5中新增的方法
那麼,我們要選擇用哪種方式呢?
在vue-router中,它提供mode引數來決定採用哪一種方式,選擇流程如下:
mode 引數:
預設hash
也可選擇history
注:如果瀏覽器不支援history新特性,則採用hash方式
如果不在瀏覽器環境則使用abstract(node環境下)
router/index.js 檔案**
import vue from
'vue'
import router from
'vue-router'
import routes from
'./routes'
vue.
use(router)
export
default
newrouter
()
那麼,經過測試,有什麼區別呢?
mode:
'hash' ,多了 「 # 」
history api可以分為兩大部分,切換和修改,參考mdn
切換歷史狀態
包括back,forward,go三個方法,對應瀏覽器的前進,後退,跳轉操作,有同學說了,(谷歌)瀏覽器只有前進和後退,沒有跳轉,嗯,在前進後退上長按滑鼠,會出來所有當前視窗的歷史記錄,從而可以跳**
history.go(
-2);
//後退兩次
history.go(
2);//前進兩次
history.
back()
;//後退
hsitory.
forward()
;//前進
修改歷史狀態包括了pushstate,replacestate兩個方法,這兩個方法接收三個引數:stateobj,title,url
history.
pushstate(,
'red'
,'red'})
window.
onpopstate
=function
(event)
}history.
back()
;history.
forward()
;
通過pushstate把頁面的狀態儲存在state物件中,當頁面的url再變回這個url時,可以通過event.state取到這個state物件,從而可以對頁面狀態進行還原,這裡的頁面狀態就是頁面字型顏色,其實滾動條的位置,閱讀進度,元件的開關的這些頁面狀態都可以儲存到state的裡面。
history模式怕啥
通過history api,我們丟掉了醜陋的#,但是它也有個毛病:
不怕前進,不怕後退,就怕重新整理,f5,(如果後端沒有準備的話),因為重新整理是實實在在地去請求伺服器的,不玩虛的。
在hash模式下,前端路由修改的是#中的資訊,而瀏覽器請求時是不帶它玩的,所以沒有問題.但是在history下,你可以自由的修改path,當重新整理時,如果伺服器中沒有相應的響應或者資源,會分分鐘刷出乙個404來。
所以,如果你想在github.io上搭乙個單頁部落格,就應該選擇hash模式。
Spring MVC工作流程描述
spring mvc 工作流程圖 圖一 圖二 1.使用者向伺服器傳送請求,請求被spring 前端控制servelt dispatcherservlet捕獲 3.dispatcherservlet 根據獲得的handler,選擇乙個合適的handleradapter。附註 如果成功獲得handler...
Spring工作流程描述
1.使用者向伺服器傳送請求,請求被spring 前端控制servelt dispatcherservlet捕獲 2.3.dispatcherservlet 根據獲得的handler,選擇乙個合適的handleradapter。附註 如果成功獲得handleradapter後,此時將開始執行 的pre...
8259A工作原理描述
通過初始化程式設計向8259a寫入相應的初始化命令icw,可以使晶元處於乙個規定的基本工作方式,並在此方式下進行工作。8259a的初始化命令字共有4個icw1 icw4,進行初始化時要求icw1 icw4按一定的順序寫入。首先,乙個外部中斷請求訊號通過中斷請求線 irq 傳輸到 imr 中斷遮蔽暫存...