详解如何去除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 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
js删除局部变量的实现方法
Jun 25 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
Feb 08 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
Sep 01 Javascript
微信小程序实现留言板功能
Nov 02 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
如何在CocosCreator里画个炫酷的雷达图
Apr 16 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
php安全配置 如何配置使其更安全
2011/12/16 PHP
PHP解析RSS的方法
2015/03/05 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
wxpython绘制音频效果
2019/11/18 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python归并排序算法过程实例讲解
2020/11/04 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
会计实习自我鉴定
2013/12/04 职场文书
工作表现评语
2014/01/19 职场文书
单位成立周年感言
2014/01/26 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
给校长的建议书600字
2014/05/15 职场文书
交通违章检讨书
2014/09/21 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
小学生家长意见
2015/06/03 职场文书
Redis如何实现分布式锁
2021/08/23 Redis