vue-router区分hash模式和history模式

总结:

hash模式是我们在url后面添加一个#xx触发事件。尽管浏览器没有请求服务器,但是页面状态和url已经关联起来了,这就是所谓的前端路由,单页应用的标配。

history模式下浏览器地址不规整(没有#),hash只能改变#后面的url片段,而history api则可以完全替换,但history刷新容易导致错误(刷新是实实在在地去请求服务器的。

 

众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别。

hash模式

hash模式的工作原理是hashchange事件,可以在window监听hash的变化。我们在url后面随便添加一个#xx触发这个事件。

window.onhashchange = function(event){console.log(event.oldURL, event.newURL);let hash = location.hash.slice(1);document.body.style.color = hash;}

打印出来的结果如下:

可以看到里边有两个属性newURL和oldURL。可以通过模拟改变hsh的值,动态页面数据。

<div id="test" style="height: 500px;width: 500px;margin: 0 auto"></div>
<script>window.onhashchange = function(event){let hash = location.hash.slice(1);document.body.style.color = hash;document.getElementById('test').style.backgroundColor = hash}
</script>

 

尽管浏览器没有请求服务器,但是页面状态和url已经关联起来了,这就是所谓的前端路由,单页应用的标配。

 

 

history模式

把window.history对象打印出来可以看到里边提供的方法和记录长度

前进,后退,跳转操作方法:

history.go(-2);//后退两次
history.go(2);//前进两次
history.back(); //后退
hsitory.forward(); //前进

HTML5新增的API
 A)history.pushState(data, title [, url]):往历史记录堆栈顶部添加一条记录; data会在onpopstate事件触发时作为 参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址;
 B)history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上; 
 C)history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样;
 D)window.onpopstate:响应pushState或replaceState的调用;有了这几个新的API,针对支持的浏览器,我们可以构建用户体验更好的应用了。就像刚提到的Facebook相册,虽然是AJAX的方式,但用户可以直接复 制页面地址分享给好友,

如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

const router = new VueRouter({mode: 'history',routes: [...]
})

当你使用 history 模式时,URL 就像正常的 url,例如 http://www.yongcun.wang/tclass,也好看!

不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问http://www.yongcun.wang/tclass就会返回 404,这就不好看了。

所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。

const router = new VueRouter({mode: 'history',routes: [{ path: '*', component: NotFoundComponent }]
})

 

出处:https://blog.csdn.net/wang1006008051/article/details/81805932 转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7本地连接不见了的修复方法

本地连接是我们用来查看网络状况的窗口&#xff0c;通常会出现在右下角的任务栏当中&#xff0c;网络如果出现问题&#xff0c;这个小电脑图标会显示出来&#xff0c;让我们一目了然&#xff0c;不过最近有位电脑用户反映&#xff0c;电脑右下角的本地连接不见了&#xff0c;用…

Vue 打包前需修改的配置,解决白屏问题

vue-cli项目和electron-vue项目打包运行都有遇到的白屏问题&#xff0c;下面记录打包前需要确认的配置 第一&#xff1a; config文件夹下的index.js 中的文件中的 assetsPublicPath &#xff1a;‘/’ 改为’./’ 不然的话会是空白页&#xff0c;记住&#xff0c;是build那块。…

win7查看电脑ip地址的方法

每台计算机都会分配到一个固定的IP地址&#xff0c;当网络出现故障的时候一般都需要知道自己计算机详细的IP地址从而进行修复&#xff0c;但是小伙伴们并不知道怎么使用命令去查看这个IP地址&#xff0c;现在小编就以win7系统为例&#xff0c;来教授大家查看电脑IP地址的方法。…

electron-vue解决打包错误、无法调用出开发者工具(亲测有效)

错误1&#xff1a; unresolved node modules vue... 或 not found modules..的错误 解决方式&#xff1a;依赖的模块错误&#xff0c;删除node_module文件夹后&#xff0c;尽量用npm install而不是淘宝镜像cnpm安装 错误2&#xff1a; Cannot create symlinks (on Windows hos…

win7系统盘符名称更改教程

一般来说&#xff0c;在装机时&#xff0c;我们都会使用C、D、E、F以此类推的字母作为盘符名称&#xff0c;但是如果我们想要更改这些名称其实也是可以的。只需要在计算机管理的磁盘管理内就可以做到了&#xff0c;下面就一起来看一下吧。 win7系统盘符名称更改教程 1、首先我…

JS中使用bignumber处理高精度小数运算

项目开发中发现精度丢失的问题&#xff0c;如0.10.2 0.30000000000000004的问题 解决方式&#xff1a;引用bignumber.js用于数字精度要求较高的计算。 1、安装或引用&#xff1a; 下载地址&#xff1a;https://github.com/MikeMcl/bignumber.js/releases 或 npm install big…

windows7系统电脑管理员权限怎么更改

我们在使用win7系统的时候&#xff0c;有时候会发现自己的账户因为没有管理员权限从而无法更改某些设置或者打开一些文件&#xff0c;非常不方便&#xff0c;因此我们可以通过下面的方法让自己获得管理员权限&#xff0c;下面就一起来看一下windows7电脑管理员权限更改教程吧。…

restful api接口设计

技术由来&#xff1a; 互联网早期&#xff0c;页面请求和并发量不高&#xff0c;且移动端未盛行时对接口要求不高&#xff0c;使用动态页面(jsp)就能满足绝大多数的使用需求。但是随着互联网和移动设备的发展&#xff0c;人们对Web应用的使用需求也增加&#xff0c;传统的动态…

win7压缩文件夹怎么压缩到最小

在我们日常使用win7系统的过程中&#xff0c;压缩文件作为经常使用的东西相信很多小伙伴都对它不陌生&#xff0c;由于其占用空间小&#xff0c;所以网站下载的文件大多都是压缩包格式。很多时候我们和朋友分享文件也以压缩包的形式传输。接下来小编就手把手来教大家win7系统中…

vue-cli安装和使用

主要记录安装vue-cli制定版本和使用&#xff0c;注意vue-cli4创建项目命令和项目结构的改变 检查当前项目的vue-cli版本&#xff1a; vue -V 卸载当前版本&#xff1a; npm uninstall vue-cli -g 安装最新版本: npm install -g vue-cli 安装指定版本&#xff1a; npm in…

Win7局域网内找不到其他电脑怎么解决

最近有用户反映说自己新装的win7纯净版系统中&#xff0c;IP之类的设置没问题&#xff0c;上网也没有问题&#xff0c;但是在访问局域网中的其他电脑时&#xff0c;找不到局域网内其他电脑&#xff0c;其他电脑也看不到我的电脑&#xff0c;Win7局域网内找不到其他电脑怎么解决…

Apache 和 Tomcat 服务器的区别

Apache 和 Tomcat 都是web网络服务器&#xff0c;两者既有联系又有区别&#xff0c;在进行HTML、PHP、JSP、Perl等开发过程中&#xff0c;需要准确掌握其各自特点&#xff0c;选择最佳的服务器配置。 Apache是web服务器&#xff08;静态解析&#xff0c;如HTML&#xff09;&…

360安全浏览器截图快捷键怎么设置 360安全浏览器截图快捷键设置教程

凭借在安全防护方面的特殊优势&#xff0c;360安全浏览器获得了不少PC用户的青睐&#xff0c;甚至还有人认为其是装机必备的软件之一。此外&#xff0c;360安全浏览器中还内置了不少实用的功能&#xff0c;例如&#xff1a;截图、翻译、网银等&#xff01;当然&#xff0c;用户…

二进制、八进制、十六进制相互转换

一、十进制与二进制之间的转换 1、十进制转二进制 方法为&#xff1a;十进制数除2取余法&#xff0c;即十进制数除2&#xff0c;余数为权位上的数&#xff0c;得到的商值继续除2&#xff0c;依此步骤继续向下运算直到商为0为止。 &#xff08;具体用法如下图&#xff09; 2、二…

Chrome浏览器插件Tab Groups Extension使用方法

谷歌浏览器最近新增加了标签分组功能&#xff0c;新的插件名称叫做Tab Groups Extension。Tab Groups Extension的主要功能是将网页标签分组进一步优化&#xff0c;使得用户能够自由地定义标签分组的规则。很多用户都是第一次接触到这个新插件&#xff0c;下面一起来看看吧。 …

vue-cli3+与vue-cli2的区别和vue-cli 修改配置

vue-cli3是基于webpack4打造&#xff0c;vue-cli2是基于webpack3vue-cli3的设计原则是“0配置”&#xff0c;移除&#xff08;隐藏&#xff09;配置文件build和config等目录vue-cli3提供了vue ui 命令&#xff0c;提供了可视化配置vue-cli3移除了static文件夹&#xff0c;新增了…

windows7更改开始菜单外观的方法

很多朋友希望将自己的win7系统外观设置地比默认外观更好看更有个性&#xff0c;但是却不知道windows7如何更改开始菜单外观&#xff0c;其实菜单外观和主题是绑定的&#xff0c;我们可以通过更改主题的方式更改开始菜单外观&#xff0c;下面就一起来看一下windows7更改开始菜单…

js判断url链接是否可访问(服务可连接,可用)

electron 项目中通过loadURL() 方法加载用户输入的url服务&#xff0c;但是electron不管该url服务是否可用都会加载执行&#xff0c;所以需要在用户输入url后对该url进行可用性判断&#xff0c;记录一下解决方案&#xff1a; 解决方案一: XMLHTTP方案 function getURL(url) {fu…

windows7系统电脑管理员权限的更改方法

我们在使用win7系统的时候&#xff0c;有时候会发现自己的账户因为没有管理员权限从而无法更改某些设置或者打开一些文件&#xff0c;非常不方便&#xff0c;因此我们可以通过下面的方法让自己获得管理员权限&#xff0c;下面就一起来看一下windows7电脑管理员权限更改教程吧。…

electron打包vue-cli4项目的解决方案1(项目实测)

背景&#xff1a; 项目已通过vue-cli4框架开发并运行在nginx服务器上&#xff08;使用了nginx的反向代理&#xff09;&#xff0c;现需要将该项目转成桌面端应用程序&#xff0c;选择electron来实现。 设想2种解决方案&#xff1a; 1、使用electron-quick-start的loadURL方法…