详解如何去除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针对DOM的应用实例(一)
Apr 15 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
JS判断对象是否存在的10种方法总结
Dec 23 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
Apr 26 Javascript
layui输入框中只允许输入整数的实现方法
Sep 18 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 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之第九天
2006/10/09 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
教师个人自我评价范文
2014/04/13 职场文书
天地会口号
2014/06/17 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
python字典的元素访问实例详解
2021/07/21 Python