Vue 路由router的两种模式

简介: 在vue中,路由router可以有两种模式可选:hash和history。设置方式就是设置Router的mode属性

两种模式


在vue中,路由router可以有两种模式可选:hash和history。设置方式就是设置Router的mode属性,如下:


import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
Vue.use(Router)
export default new Router({
  // mode: 'history',
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})
复制代码


Vue中默认是hash模式,所以不需要设置mode;如果想使用history模式,只需要将mode设置为‘history’即可。


下面简单看看两者的不同:

  • 如果使用的是hash模式,url中就会存在“#“符号,这个符号后面的是路径。

比如我们访问http://localhost:8080/ ,会看到浏览器自动添加成http://localhost:8080/#/

如果我们要访问"/test"路径,则url为http://localhost:8080/#/test ,而http://localhost:8080/test 不可以

但是这只是表面现象,这两种模式本质的区别是什么?


history模式


要理解hash模式,就先要知道history模式,因为hash模式是解决问题出现,知道问题是什么就很容易理解hash模式。

history模式就是我们传统的路径,url中的路径就是服务端根目录下的相对路径,是真实路径。

比如http://localhost:8080/test/123.html ,则就需要在根目录下有test文件夹,文件夹下有123.html这个文件。

但是如果我们没有这个文件,而是用vue这种router的方式呢?

那么就必须用nginx代理,否则找不到这个文件就是返回404。

这样就需要在nginx中配置每一个route,漏下一个就会404

所以history模式下的路由分发是服务端(nginx)来做的


hash模式


为了解决上面的问题,hash模式出现了。在hash模式的url中“#“符号后面的路径并不是真实路径,而是以类似参数的形式传给默认文件。

默认文件就是index,在这里通过“#“符号后面的路径去匹配路由处理,所以只要有index这一个文件是真实路径就可以。


这样就不需要在nginx一个个配置了。


这样hash模式下的路由分发就不需要服务端来做了,直接在前端就处理了。

当然相对于hash模式,history模式也有优势,根据 Mozilla Develop Network 的介绍,调用 history.pushState() 相比于直接修改 hash,存在以下优势:


pushState() 设置的新 URL 可以是与当前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能设置与当前 URL 同文档的 URL;

pushState() 设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;而 hash 设置的新值必须与原来不一样才会触发动作将记录添加到栈中;

pushState() 通过 stateObject 参数可以添加任意类型的数据到记录中;而 hash 只可添加短字符串;

pushState() 可额外设置 title 属性供后续使用。


目录
相关文章
|
19天前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
30 3
|
23天前
|
缓存 JavaScript 搜索推荐
Vue Router 导航钩子的使用场景
【10月更文挑战第13天】
13 1
|
23天前
|
JavaScript 搜索推荐 数据处理
Vue Router 导航钩子
【10月更文挑战第17天】需要注意的是,过度使用导航钩子可能会导致代码复杂度增加,因此需要合理规划和使用。此外,不同的钩子在不同的场景下具有不同的作用,需要深入理解其特点和用法,才能更好地发挥它们的价值。可以在实际项目中结合具体需求,充分利用这些导航钩子来打造更加智能、灵活的路由导航机制。
12 1
|
28天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
17天前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
52 0
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1048 0
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
3天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
3天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
3天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。