详解如何去除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 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
JavaScript中伪协议 javascript:使用探讨
Jul 18 Javascript
javascript电商网站抢购倒计时效果实现
Nov 19 Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
Jan 23 Javascript
Vue render深入开发讲解
Apr 13 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
Javascript三种字符串连接方式及性能比较
May 28 Javascript
通过JS深度判断两个对象字段相同
Jun 14 Javascript
ElementUI radio组件选中小改造
Aug 12 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 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
星际争霸任务指南——人族
2020/03/04 星际争霸
php使用codebase生成随机数
2014/03/25 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
js静态作用域的功能。
2006/12/25 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
基于python实现操作git过程代码解析
2020/07/27 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
详解python的变量缓存机制
2021/01/24 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
工作表现自我评价
2014/02/08 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
推广普通话的宣传语
2015/07/13 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python