详解如何去除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 相关文章推荐
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
node.js中的fs.rmdirSync方法使用说明
Dec 16 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
EasyUI学习之DataGird分页显示数据
Dec 29 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
Jan 24 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 jQuery
基于vue的video播放器的实现示例
Feb 19 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
原生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
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
python频繁写入文件时提速的方法
2019/06/26 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Python eval函数原理及用法解析
2020/11/14 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
大专计算机个人求职的自我评价
2013/10/21 职场文书
简单英文演讲稿
2014/01/01 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技