在vue项目中我们知道的路由模式存在两种,一种是history模式一种是hash模式。
比较常用的时hash模式。 那我们进行介绍hash模式。
hash 模式
在早期的web项目中我们一般是通过后端的controller进行跳转的。那其实前端也可以同过location.hash来实现,原理非常简单,location.hash可以直接获得url中#之后的地址,
例如: www.wenquan.com#home
location.hash = #home
hash路由模式的特点:
- url中的hash值只是客户端的一种状态,向服务端发送请求的时候,hash部分不会被发送。
- hash值的改变会在浏览器的历史增加访问记录,所以可以通过浏览器的回退、前进控制hash的改变。
- 可以通过a标签设置href值或者通过js给locationl.hash赋值来改变hash值
- 可以通过hashchange事件来监听hash的变化,来对页面进行跳转(渲染)。
history模式实现原理
Html5提供了history API来实现URL的变化,其中主要的API有以下两个:
history.pushState()和history.replaceState().这两个API可以在不刷新的情况下操作浏览器的历史记记录。不同的是前者是新增一个历史记录,后者是直接替换当前的历史记录。
window.history.pushState(null,null,path)
window.history.replaceState(null,null,path)
history路由模式的特点:
- 通过pushState和replceState两个API来操作实现URL的变化
- 可以通过popstate事件来监听URL的变化,从而对页面进行跳转(渲染)
- history.pushState()或者history.replaceState()不会触发popState事件。需要手动触发页面的跳转。
history模式的问题:
在刷新页面的时候,浏览器会重新请求服务端,此时就会找不到页面。需要进行服务端的配置