hash模式:
-
hash路由模式是比较好区分的,凡是的url后带有
#
的都属于hash模式 -
hash
#
后的值,不会包含在http请求中,改变hash的值不会引起页面的重新加载(他是前)端路由交互处理,#后面hash值变化不会导致浏览器像服务器发送请求,浏览器不发送请求,也就不会刷新页面) -
hash原理:
onhashchange
事件,可以在window对象上监听这个事件(每次hash值的变化,都会出发hashchange事件,通过这个事件我们就可以知道hash值发生了哪些变化,通过监听hashchange来实现更新页面部分内容操作) -
会创建
hashhistory
对象,在访问不同的路由会发生两种事件:hashhistory.push():将新的路由添加到浏览器访问的历史栈顶,hashhistory.replace()替换到当前栈 -
hash可以兼容到
ie8
以上
history模式:
-
url不带参数,所以看起来比较美观
-
history依赖于前后端交互,即将url修改的就和正常请求的后端url一样,如后端没有配置对应的/user/id的路由处理,就会返回404错误
-
history原理:
onpopstate
事件,当浏览器跳转到新的状态时会触发popstate事件 -
history可以兼容到
ie10