Vue-router
:即SPA(单页应用)的路径管理器,vue-router
是 Vue 官方的路由插件,它和 vue.js 是深度集成的,适合用于构建单页面应用
vue
的单页面应用是基于路由和组件的
url
和组件之间的一一映射关系SPA(single page application)
:单一页面应用程序,只有一个完整的页面
vue-router
在实现单页面前端路由时,提供了两种方式:
根据
mode
参数来决定采用哪一种方式const router = new VueRouter({ mode: 'history', // 如果这里不写,路由默认为 hash模式 routes: [...] })
模式配置:vue-router
默认 hash 模式
实现原理:
onhashchange
事件:通过这个事件来监测hash值的变化,从而更新页面的部分内容工作方式:
#
符号,也称为锚点,代表的是网页中的一个位置#
后的部分,浏览器只会滚动到相应位置,不会重新加载网页
#
后的部分,都会在浏览器的访问历史中增加一个记录#
符号之前的内容会被包含在请求中
最后总结:
由于hash模式会在URL地址中自带
#
,这样URL地址看上去就不是那么美观如果不想要很丑的 hash
#
符号,我们可以使用 history 模式
模式配置:只需要在配置路由规则时,加入mode: 'history'
实现原理:
pushState()
、 replaceState()
back
、forward
、go
基础之上,它们提供了对历史记录修改的功能工作方式:
#
符号#
号,所以当用户刷新页面之类的操作时,浏览器还是会给服务器发送请求
最后总结:
pushState()
方法来对浏览器的浏览记录进行修改,来达到不用请求后端来渲染的效果History模式设置新的URL可以是与当前 URL 同源的任意 URL
Hash模式只可修改 #
后面的部分,因此只能设置与当前 URL 同文档的 URL
History模式设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中
Hash模式设置的新值必须与原来不一样才会触发操作并将记录添加到栈中
History模式通过stateObject
参数可以添加任意类型的数据到记录中
Hash模式只能添加短字符串
History模式的前端URL必须与后端URL一致,否则后端无法处理,将返回404错误
Hash模式即使后端没有路由,也不会返回404错误
History模式可以设置额外的title
属性供后续使用
History模式 | Hash模式 |
---|---|
History模式设置新的URL可以是与当前 URL 同源的任意 URL | Hash模式只可修改 # 后面的部分,因此只能设置与当前 URL 同文档的 URL |
History模式设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中 | Hash模式设置的新值必须与原来不一样才会触发操作并将记录添加到栈中 |
History模式通过stateObject 参数可以添加任意类型的数据到记录中 | Hash模式只能添加短字符串 |
History模式的前端URL必须与后端URL一致,否则后端无法处理,将返回404错误 | Hash模式即使后端没有路由,也不会返回404错误 |
History模式可以设置额外的title 属性供后续使用 | — |
注:还有一种
abstract
模式,它支持所有 JavaScript 运行环境,如 Node.js 服务器端。如果发现没有浏览器的 API,路由会自动强制进入这个模式.
通过调用JavaScript形式的API实现
this.$router.push(‘路由地址’)
会向
history
栈添加一个记录,可通过浏览器后退按钮回退
this.$router.replace()
会替换掉当前
history
记录,不会向history
添加记录
this.$router.go(n)
用
n
表示在history
记录中前进/后退多少步,类似于方法window.history.go(n)
<router-link to="路由地址"></router-link>