http://www.xxx.com/#login
這種 #。後面 hash 值的變化,並不會致使瀏覽器向服務器發出請求,瀏覽器不發出請求,也就不會刷新頁面。另外每次 hash 值的變化,還會觸發hashchange
這個事件,經過這個事件咱們就能夠知道 hash 值發生了哪些變化。而後咱們即可以監聽hashchange
來實現更新頁面部份內容的操做:html
function matchAndUpdate () {
// todo 匹配 hash作 dom 更新操做
}
window.addEventListener('hashchange',matchAndUpdate )
// addEventListener() 方法用於向指定元素添加事件句柄。
Hash 方法是在路由中帶有一個 #
,主要原理是經過監聽 #
後的 URL 路徑標識符的更改而觸發的瀏覽器 hashchange
事件,而後經過獲取 location.hash
獲得當前的路徑標識符,再進行一些路由跳轉的操做,參見 MDN前端
location.href
:返回完整的 URLlocation.hash
:返回 URL 的錨部分location.pathname
:返回 URL 路徑名hashchange
事件:當 location.hash
發生改變時,將觸發這個事件http://sherlocked93.club/base/#/page1
,那麼上面幾個值分別爲:
# http://sherlocked93.club/base/#/page1
{
"href": "http://sherlocked93.club/base/#/page1",
"pathname": "/base/",
"hash": "#/page1"
}
注意: Hash 方法是利用了至關於頁面錨點的功能,因此與原來的經過錨點定位來進行頁面滾動定位的方式衝突,致使定位到錯誤的路由路徑,所以須要採用別的辦法,以前在寫 progress-catalog 這個插件碰到了這個狀況。vue