详解如何去除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 this调用规则说明
Mar 08 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
js去空格技巧分别去字符串前后、左右空格
Oct 21 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
JS实现购物车特效
Feb 02 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
Electron 如何调用本地模块的方法
Feb 01 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 Javascript
微信小程序图片右边加两行文字的代码
Apr 23 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP生成条形图的方法
2014/12/10 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
详解JavaScript的BUG和错误
2018/05/07 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python OS模块常用函数说明
2015/05/23 Python
python logging日志模块的详解
2017/10/29 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Django框架 querySet功能解析
2019/09/04 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
解决pip install psycopg2出错问题
2020/07/09 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
大型活动策划方案
2014/01/12 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
小区推广策划方案
2014/06/06 职场文书
2014年学前班工作总结
2014/12/08 职场文书
死亡诗社观后感
2015/06/05 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书