前端路由

一般来说,前端路由的实现,会包括两种模式:

  1. History 模式
  2. 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)。