核心:更新視圖,都不會重新請求頁面,在發生改變的時候,都會在瀏覽器中新增一條記錄,通過這個記錄,來實現更新視圖但是不請求后台
hash模式:(http://abc.com/#/hello),hash值為#/hello,包含在URL中,可通過 window.location.hash 獲取。
hash("#") 的作用是加載 URL 中指示網頁中的位置。
hash的改變事件可以監聽:window.addEventListener("hashchange",funcRef,false);
hash值(可以通過window.localtion.hash獲取)每一次發生改變,瀏覽器都會在歷史記錄當中新增一個記錄。
hash(HashHistory)有兩個方法,push()和replace()。
push()方法將新路由添加到歷史記錄的棧頂,replace()方法則是把當前路由替換成新的路由。
history模式:(http://abc.com/user/id),history模式需要后台配置支持。如果后端沒有配置對應/user/id的路由處理,則會返回404錯誤。
history(HTML5History)是瀏覽器歷史記錄棧提供的接口,通過back()、forward()、go()等方法,我們可以讀取瀏覽器歷史記錄棧的信息,進行各種跳轉操作。
pushState()、replaceState() 使得我們可以對瀏覽器歷史記錄棧進行修改:
window.history.pushState(stateObject,title,url)
window.history.replaceState(stateObject,title,url)
history的兩個方法和hash的兩個方法並沒有什么區別
history監聽地址變化:window.onpopstate
兩種模式的比較:
1、history設置的新URL可以是同源的任意URL,而hash模式只能夠修改#后面的部分,故只可設置與當前同文檔的URL;
2、history可以添加任意類型的數據到記錄當中,hash模式只能夠添加短字符串;
3、history模式可以額外添加title屬性,提供后續使用;
4、history模式則會將URL修改得就和正常請求后端的URL一樣,如后端沒有配置對應/user/id的路由處理,則會返回404錯誤。