前端路由
一般来说,前端路由的实现,会包括两种模式:
- History 模式
- Hash 模式
History 模式
在 history 中跳转
使用 window.history.back()、window.history.forward()和 window.history.go()方法,可以实现在用户历史记录中向后和向前的跳转。
添加和修改历史记录中的条目
使用 history.pushState () 和 history.replaceState () 方法,它可以操作浏览器的历史栈,同时不会引起页面的刷新(可避免页面重新加载)。
监听页面路由切换
使用 pushState () 和 replaceState () 来修改路由信息,通过 popstate 事件监听页面路由变化,来进行页面的局部更新,这便是 History 的路由模式。
优缺点
使用 history 更改 URL 时可以保持页面无刷(不会发起服务请求,除非手动刷新页面),但是必须使新的 URL 和当前 URL 同源,否则就会抛出异常。
Hash 模式
Hash 模式使用的是从井号(#)开始的 URL(锚)片段,主要依赖 Location 对象的 hash 属性(location.hash)和 hashchange 事件,包括:
使用 location.hash 来设置和获取 hash
location.hash 的设置和获取,并不会造成页面重新加载,利用这一点,我们可以记录页面关键信息的同时,提升页面体验。
监听 hashchange 事件
当页面的 hash 改变时,hashchange 事件会被触发,同时提供了两个属性:newURL(当前页面新的 URL)和 oldURL(当前页面旧的 URL)。