详解如何去除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判断一个URL链接是否有效的实现方法
Oct 08 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 Javascript
详解require.js配置路径的用法和css的引入
Sep 06 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 Javascript
VSCode配置react开发环境的步骤
Dec 27 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
Sep 12 Javascript
ES2020系列之空值合并运算符 '??'
Jul 22 Javascript
vue-cli4使用全局less文件中的变量配置操作
Oct 21 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怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python如何实现异步调用函数执行
2019/07/08 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python使用configparser库读取配置文件
2020/02/22 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
.NET概念性的面试题
2012/02/29 面试题
初中生评语大全
2014/04/24 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python