详解如何去除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 相关文章推荐
js 判断脚本加载完毕的代码
Jul 13 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
layui 弹出删除确认界面的实例
Sep 06 Javascript
微信小程序自定义扫码功能界面的实现代码
Jul 02 Javascript
vue操作dom元素的3种方法示例
Sep 20 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
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
php创建图像具体步骤
2017/03/13 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
json跟xml的对比分析
2008/06/10 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Django框架中方法的访问和查找
2015/07/15 Python
十个Python程序员易犯的错误
2015/12/15 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
会计自我鉴定
2014/02/04 职场文书
婚庆公司计划书
2014/09/15 职场文书
大学生入党自荐书
2015/03/05 职场文书
学校节水倡议书
2015/04/29 职场文书
组织委员竞选稿
2015/11/21 职场文书
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python