再通过vue-cli创建项目的时候,会出现 Use history mode for router? 也就是再问你:是不是用history模式来创建路由

hash模式和history模式的不同

最直观的区别就是在url中 hash 带了一个很丑的 #     而history是没有#的

对于vue这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义。前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求。

为了达到这一目的,浏览器当前提供了以下两种支持:

  hash —— 即地址栏 URL 中的 # 符号(此 hash 不是密码学里的散列运算)。比如这个 URL:http://www.abc.com/#/hello hash 的值为 #/hello。

  它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。

  history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
因此可以说,hash 模式和 history 模式都属于浏览器自身的特性,Vue-Router 只是利用了这两个特性(通过调用浏览器提供的接口)来实现前端路由.

使用场景

一般场景下,hash 和 history 都可以,除非你更在意颜值,# 符号夹杂在 URL 里看起来确实有些不太美丽。

如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成URL 跳转而无须重新加载页面。

另外,根据 Mozilla Develop Network 的介绍,调用 history.pushState() 相比于直接修改 hash,存在以下优势:

pushState() 设置的新 URL 可以是当前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能设置与当前 URL 同文档的 URL;
pushState() 设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;而 hash 设置的新值必须与原来不一样才会触发动作将记录添加到栈中
pushState() 通过 stateObject 参数可以添加任意类型的数据到记录中;而 hash 只可添加短字符串;
pushState() 可额外设置 title 属性供后续使用
当然啦,history 也不是样样都好。SPA 虽然在浏览器里游刃有余,但真要通过 URL 向后端发起 HTTP 请求时,两者的差异就来了。尤其在用户手动输入 URL 后回车,或者刷新(重启)浏览器的时候。

个人在接入微信的一个活动开发过程中 开始使用的hash模式,但是后面后端无法获取到我#后面的url参数,于是就把参数写在#前面,但是讨论后还是决定去掉这个巨丑的#

于是乎改用history模式,但是开始跑流程的时候是没问题,但是后来发现跳转后刷新或者回跳,会报一个404的错误,找不到指定的路由,最后后端去指向正确的路由 加了/hd/xxx 去匹配是否有这个/hd/{:path} 才得以解决

总结

1 hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.abc.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。

history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 http://www.abc.com/book/id 如果后端缺少对 /book/id 的路由处理,将返回 404 错误。Vue-Router 官网里如此描述:“不过这种模式要玩好,还需要后台配置支持……所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。”

3 结合自身例子,对于一般的 Vue + Vue-Router + Webpack + XXX 形式的 Web 开发场景,用 history 模式即可,只需在后端(Apache 或 Nginx)进行简单的路由配置,同时搭配前端路由的 404 页面支持。

转载:https://blog.csdn.net/yexudengzhidao/article/details/87689960

Use history mode for router? Vue-router 中hash模式和history模式的区别相关推荐

  1. webpack中hash、chunkHash、contentHash的区别

    webpack中hash.chunkHash.contentHash的区别 文件目录: index.js依赖common.js和base.less hash Hash:和整个项⽬的构建相关,只要项⽬⽂ ...

  2. Vue实例中生命周期created和mounted的区别(具体细节分析)。

    最近刚好在学习Vue.js,在实敲轮播demo时发现了一个当时感觉很奇怪的问题: 初始化使用mounted钩子时,只调用了一次,之后就没有调用过了.害我一直以为是自己之后的代码书写有问题,结果自己再敲 ...

  3. vue项目中,360浏览器兼容模式下部分页面显示不出来

    1.问题 在项目中引用了百度地图,但是在360浏览器的兼容模式下无法显示 兼容模式可能就是为了兼容IE7之前的网站代码 , 而非我们字面理解的'兼容'二字 2.解决 告诉浏览器最少使用IE11的内核去 ...

  4. hibernate中save、update、saveOrUpdate的区别

    saveOrUpdate如果hibernate-mapping配置的主键已存在,就不会新增,会更新. 转载于:https://www.cnblogs.com/Alwaysbecoding/p/9494 ...

  5. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  6. VueJS 官方路由之 Vue Router

    文章目录 参考 描述 Vue Router 获取 npm yarn 依赖问题 使用 router-link router-view 配置路由插件 基本结构 子组件 导入需要进行路由匹配的组件 定义路由 ...

  7. vue项目没有router文件夹_vue项目——Vue Router路由的使用

    前言: 学习vue也有一段时间了,这里把学习整个vue项目中的一些知识点和问题,整理下方便自己记录,也希望给大家带来方便.我会连续写几篇系统的文章,讲解一个完整的vue项目中用到的各个使用模块.今天先 ...

  8. vue router中hash模式和history模式的区别

    面试问答     hash 模式与 history 模式的区别,这个也是面试常问的问题,不要小看这道题其实问到这里的时候那个面试官应该是个大牛,开发经验丰富,这个题其实就是考验你的开发经验是否属实. ...

  9. vue router 原生html,Vue router 使用 History 模式导致页面请求 404

    vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...

  10. 【Vue.js】Vue.js中常用的UI组件库和Vue Router

    1.Vue生态中常用的UI组件库 1. vant 介绍 轻量级.可靠的移动端 Vue 组件库 有赞前端团队出品 GitHub地址:https://github.com/youzan/vant 特性 拥 ...

最新文章

  1. Java中? extends T和? super T的理解
  2. 进击的Waymo,掘进无人驾驶深水区
  3. php mysql集群_PHP如何访问数据库集群
  4. CF-1209 F. Koala and Notebook(建图BFS)
  5. Leet Code OJ 27. Remove Element [Difficulty: Easy]
  6. 学习了MPLS ×××
  7. 第五周课程总结实验报告(三)
  8. Outlook最小到系统托盘
  9. 【PHP】使用PHP抓取Bing每日图像并为己所用
  10. Doris之Routine Load
  11. 01.mac下安装配置maven
  12. ComponentArt Web.UI控件的bug及解决办法
  13. javascript 函数2——对象排序
  14. Ubuntu系统未发现vim命令
  15. MTK6763平台手机 在国外无法成功注册VOLTE。求解
  16. 通信算法之三十:Turbo仿真链路开发基于《低压电力线宽带载波通信互联互通技术规范第4—1部分物理层通信协议》
  17. 【组合数学】多项式定理 ( 多项式系数 | 多重集全排列 | 对应放球子模型方案数 | 多项式系数相关恒等式 )
  18. 在小公司做项目经理有意义吗_产品经理–是否具有战略意义?
  19. vuejs crc算法,16进制换算
  20. redis 源码分析 跳表实现

热门文章

  1. 图片存储到webapp同级目录
  2. [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作
  3. [NOI2008] 假面舞会
  4. Linux中的TTY是什么意思
  5. C++ 打印pid和tid
  6. matlab以jpg格式保存矩阵,Matlab将矩阵保存为图像
  7. signal软件如何退出账号_微信怎么一键切换登录 微信多账号一键切换方法【图文详解】...
  8. 编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,掷两枚骰子之后,计算点数之和。
  9. Cascade CNN
  10. HTML/HTML5