爲了構建 SPA(單頁面應用),須要引入前端路由系統,這也就是 Vue-Router 存在的意義。前端路由的核心,就在於 —— 改變視圖的同時不會向後端發出請求。 爲了達到這種目的,瀏覽器當前提供瞭如下兩種支持:前端
hash模式的背後是onhashchange事件,能夠在window對象上監聽這個事件:vue
window.onhashchange = function(event){
console.log(event.oldURL, event.newURL);
let hash = location.hash.slice(1);
document.body.style.color = hash;
}
複製代碼
這段能夠在hash改變的時候改變字體顏色。
hash發生變化的url都會被瀏覽器記錄下來,從而你會發現瀏覽器的前進後退均可以使用了,同時點擊後退時,頁面字體顏色也會發生變化。
這樣一來雖然沒有向後端發送請求,可是頁面狀態和url關聯在了一塊兒,這就是前端路由。 網易雲和百度網盤就是典型的使用hash的網頁。vue-router
history包括go(),forward(),back()方法。後端
history.go(-2);
history.go(2);//前進兩次
history.back();
history.forward();
複製代碼
修改歷史狀態,包括了pushState()和replaceState()兩種方法,這兩個方法接收三個參數,stateObj,title,url。瀏覽器
history.pushState({color:'red'}, 'red', 'red'})
window.onpopstate = function(event){
console.log(event.state)
if(event.state && event.state.color === 'red'){
document.body.style.color = 'red';
}
}
history.back();
history.forward();
複製代碼
經過pushState方法把頁面狀態保存在state對象中,當頁面的url再變回這個url時,能夠經過event.state取到這個state對象,從而能夠對頁面狀態進行還原,主要是滾動條的位置,閱讀進度,組建的開關等等。bash
history模式不怕前進不怕後退怕刷新,f5。
刷新是實實在在的去請求後端了。
在hash模式下,前端路由修改的是#中的信息,而瀏覽器請求是不帶他的,因此沒有問題。可是在history模式下你能夠自由的修改path,當刷新時若是沒有相應的的響應或者資源,會分分鐘刷新一個404出來。字體