详解如何去除vue项目中的#——History模式


Posted in Javascript onOctober 13, 2017

使用vue-cli搭建的环境,在配置好路由之后,可以看到下面的情况:

详解如何去除vue项目中的#——History模式  

但是不难发现#的出现真的很丑陋,并且也不知道这是什么作用?

所以就去Stack Overflow上搜索了,果然还有~  看来Stack Overflow是真的强大,你在项目中遇到的问题实际上在so上都已经被问过并且解决了,这不:   

详解如何去除vue项目中的#——History模式

这是最高票的回答,即在vue2中将mode模式设置为history,试过之后确实奏效!

但是知道这样可以解决问题,却不知道为什么,这是不行的, 随着连接,我们看到了文档。

所以这篇文章也就是引申到文档的理解了,大家可以直接去看文档。 

对于vue开发的单页面应用,我们在切换不同的页面的时候,可以发现html永远只有一个,这也真是称之为单页面的原因,而vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。因为对于正常的页面来说,更换url一定是会导致页面的更换的, 而只有更换url中的查询字符串和hash值得时候才不会重新加载页面。 这里也就是这个道理。

但是#这种形式真的很丑!  所以,如果不想要,可以使用路由的history模式!!! 这种模式充分利用了history.pushState API来完成URL的跳转而不需要重新加载页面。

const router = new VueRouter({
 mode: 'history',
 routes: [...]
})

使用这种模式之后,就没有#了,而是可以像使用正常的url进行访问了。

不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。

所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

注意:目前我所做的项目的后端没有支持此种方式,所以还是先使用#的方式进行开发。

警告

给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。

const router = new VueRouter({
 mode: 'history',
 routes: [
 { path: '*', component: NotFoundComponent }
 ]
})

或者,如果你是用 Node.js 作后台,可以使用服务端的路由来匹配 URL,当没有匹配到路由的时候返回 404,从而实现 fallback。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 浏览器检测代码精简版
Mar 04 Javascript
js计算精度问题小结
Apr 22 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
jQuery中过滤器的基本用法示例
Oct 11 jQuery
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 #Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 #Javascript
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 #Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 #Javascript
JavaScript实现随机数生成器(去重)
Oct 13 #Javascript
AngualrJs清除定时器遇到的坑
Oct 13 #Javascript
React Native中Navigator的使用方法示例
Oct 13 #Javascript
You might like
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
JsDom 编程小结
2011/08/09 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
复习Python中的字符串知识点
2015/04/14 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python Socket传输文件示例
2017/01/16 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
python中退出多层循环的方法
2018/11/27 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
pytorch进行上采样的种类实例
2020/02/18 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
二手房购房意向书范本
2014/04/01 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电