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