详解如何去除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关键字变色实现思路及代码
Feb 21 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
jQuery中hasClass()方法用法实例
Jan 06 Javascript
javascript数组去重小结
Mar 07 Javascript
原生js实现addClass,removeClass,hasClass方法
Apr 27 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
基于Bootstrap的网页设计实例
Mar 01 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
js装饰设计模式学习心得
Feb 17 Javascript
如何用Node写页面爬虫的工具集
Oct 26 Javascript
javascript中call()、apply()的区别
Mar 21 Javascript
Vue使用localStorage存储数据的方法
May 27 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
PHP 函数语法介绍一
2009/06/14 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
php操作mongoDB实例分析
2014/12/29 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
PHP学习笔记之session
2018/05/06 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
pygame实现打字游戏
2021/02/19 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
Linux内核产生并发的原因
2012/07/13 面试题
九年级体育教学反思
2014/01/23 职场文书
创业资金计划书
2014/02/06 职场文书
银行授权委托书格式
2014/10/10 职场文书
部门2014年度工作总结
2014/11/12 职场文书
商场营业员岗位职责
2015/04/14 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis