vue 路由的hash和history模式的区别

news/2024/11/22 20:04:01/

Vue-Router有两种模式:hash模式和history模式。默认的路由模式是hash模式。
1. hash模式
简介: hash模式是开发中默认的模式,它的URL带着一个#,例如:www.weiwehao.com/#/flower,它的hash值就是#/flower。

特点:hash值会出现在URL里面,但是不会出现在HTTP请求中,对后端完全没有影响。所以改变hash值,不会重新加载页面。hash路由被称为是前端路由,已经成为SPA(单页面应用)的标配。

原理: hash模式的主要原理就是onhashchange()事件:

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

使用onhashchange()事件的好处就是,在页面的hash值发生变化时,无需向后端发起请求,window就可以监听事件的改变,并按规则加载相应的代码。除此之外,hash值变化对应的URL都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退。

2. history模式

简介: history模式的URL中没有#,它使用的是传统的路由分发模式,即用户在输入一个URL时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。
特点: 当使用history模式时,URL就像这样:abc.com/user/id。相比hash模式更加好看。但是,history模式需要后台配置支持。如果后台没有正确配置,访问时会返回404。
API: history api可以分为两大部分,切换历史状态和修改历史状态:
修改历史状态:包括了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法,这两个方法应用于浏览器的历史记录栈,提供了对历史记录进行修改的功能。只是当他们进行修改时,虽然修改了url,但浏览器不会立即向后端发送请求。如果要做到改变url但又不刷新页面的效果,就需要前端用上这两个API。
切换历史状态: 包括forward()、back()、go()三个方法,对应浏览器的前进,后退,跳转操作。

虽然history模式丢弃了丑陋的#。但是,它也有自己的缺点,就是在刷新页面的时候,如果没有相应的路由或资源,就会刷出404来。
如果想要切换到history模式,就要进行以下配置(后端也要进行配置):

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

3. 如何获取页面的hash变化
(1)监听$route的变化

// 监听,当路由发生变化的时候执行
watch: {$route: {handler: function(val, oldVal){console.log(val);},// 深度观察监听deep: true}
},

(2)window.location.hash读取#值 window.location.hash 的值可读可写,读取来判断状态是否改变,写入时可以在不重载网页的前提下,添加一条历史访问记录。

4. r o u t e 和 route 和 routerouter 的区别

$route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息参数
$router 是“路由实例”对象包括了路由的跳转方法,钩子函数等。


http://www.ppmy.cn/news/242134.html

相关文章

ftp传输文件大小有限制吗 ftp文件传输工具有哪些

软件版本:xmanager 7 这两年,线上办公逐渐常态化,相信大家对ftp这个概念也比较熟悉了。ftp,即文件传输协议,线上办公就是用ftp软件进行文件传输的。那ftp传输文件大小有限制吗,ftp文件传输工具有哪些&…

达梦数据库读写分离集群异常测试(⾼可⽤)及双主(类似脑裂)问题处理

目录 测试前准备... 4 断电测试... 4 一、备库204断电... 4 二、断电数据新增测试... 5 1、备库204断电... 5 2、主库200新增数据,203备库查询正常... 5 3、204服务器启动并启动守护进程,测试,正常... 6 三、主库断电测试... 6 1、主…

集成灶公认10大品牌有哪些?从这三方面轻松辨别品牌是否靠谱

集成灶公认10大品牌有哪些?这是很多消费者面对鱼龙混杂的集成灶市场发出的疑问。在选择集成灶产品时,如果不知道如何下手,不妨从销售额、企业影响力和产品创新力这三方面来进行辨别,这样就能够轻松了解它们是不是真的称得上是全国…

干货 | 提高步进电机运行质量的电流控制方法

A双极性步进电机的基础知识 双极性步进电机包含两绕组,为了使电机运行平稳,不断的给这两个线圈加以相位差90度的正弦波,步进电机就开始转动起来。 通常,步进电机不是由模拟线性放大器驱动;而是由PWM电流调节驱动&…

RockChip:Boot Mode(二)

一:recovery (key) 在无usb接入情况下,通过按压volume-up键再上电进入recovery模式。 由于loader mode的优先级高于recovery模式,故需要断开usb连接。 * rockchip_dnl_key_pressed(): * * (1) volume-up key (default) * (2) menu key (If no rockusb) * * Its possible t…

接口测试-使用mock生产随机数据

在做接口测试的时候,有的接口需要进行大量的数据进行测试,还不能是重复的数据,这个时候就需要随机生产数据进行测试了。这里教导大家使用mock.js生成各种随机数据。 一、什么是mock.js mock.js是用于生成随*机数据,拦截 Ajax 请…

【spring源码系列-03】xml配置文件启动spring时refresh的前置工作

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【二】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428【三】xml配置文件启动spring时refres…

常见的内存数据库有哪些

Redis:键值存储数据库,常用于缓存、消息代理和应用程序数据处理。 Memcached:分布式内存对象缓存系统,用于缓存Web应用程序数据。 VoltDB:高速内存数据库,用于实时数据处理和实时决策。 Aerospike&#…