当前位置: 首页 > news >正文

VUE 实现路由的基本原理

路由

基本概念

在前端技术早期,所有页面的跳转通过更改url,浏览器页面刷新获取新的页面内容,这种粗糙的交互方式,一直等待优化。
后来,改变发生了——Ajax 出现了,它允许人们在不刷新页面的情况下发起请求,实现内容的更新。伴随的还有“不刷新页面即可更新页面内容”这种需求。在这样的背景下,出现了 SPA(单页面应用)。最初的spa 应用,只有一个URL地址,大家在使用的过程中就发现了两个问题,1.无法定位当前页面的位置,不知道前后都是那些页面。2.对SEO非常不友好。
为了解决这两个问题就诞生了前端路由。

vue路由的基本原理

其实vue原理体现在vue路由配置项中的“history”。
类型: string
默认值:“hash” (浏览器环境) | “abstract” (Node.js 环境)
可选值: “hash” | “history” | “abstract”

hash

hash模式:地址上有“#”(哈希字符),是hash模式;只要是带有“#”的,都是前端路由。
hash模式的工作原理是hashchange事件,可以在window监听hash的变化。类似:http://www.xxx.com/#/home,url的hash是 (#) 及后面的那部分。常用作锚点在页面内进行导航,改变 URL 中的 hash 部分不会引起页面刷新。

history

history模式:例如:http://yoursite.com/user/id,这种很顺滑的;
history模式的工作原理是HTML5 规范中提供了 history.pushStatehistory.replaceState 来进行路由控制。通过window监听popstate,使用pushState、replaceState可以实现改变 url ,向服务器发送请求,但是不会引起页面刷新。

abstract

abstract模式是使用一个不依赖于浏览器的浏览历史虚拟管理后端。基于内存的历史。该历史的主要目的是为了处理服务端渲染。它从一个不存在的特殊位置开始。用户可以通过调用 router.push 或 router.replace 将该位置替换成起始位置。

history hash的区别

hash模式和history模式的区别主要体现在原理、表现、兼容性、以及与后端交互等方面。以下是详细介绍:

原理不同

hash模式通过监听浏览器窗口的onhashchange事件来响应URL中#符号后的变化,而History模式利用浏览器提供的pushStatereplaceState方法,并通过监听popstate事件来模拟历史记录的改变,从而实现路由的更新。

表现不同

在hash模式下,URL中会包含#符号以及后面的字符,这在地址栏中会显示为带有#的URL,而在history模式下,URL中不包含#符号,因此地址栏中不会显示#符号。
兼容性不同。Hash模式向下兼容,可以兼容到IE8,而history模式则需要浏览器支持HTML5,至少需要IE10。
与后端交互不同。hash模式中,URL的变化不会导致浏览器向服务器发送请求,因此对后端没有影响,改变Hash值不会重新加载页面,而history模式中,URL的变化会触发向服务器发送请求的行为,如果后端没有正确处理,可能会导致404错误。

总结

具体选择哪种模式取决于项目的具体需求,例如,如果项目需要良好的SEO支持,或者需要与后端进行紧密的交互,那么History模式可能更适合,如果项目主要关注用户体验,且对后端没有特殊要求,那么Hash模式可能是一个更好的选择。

http://www.lryc.cn/news/336276.html

相关文章:

  • Android 11 添加系统属性
  • docker 创建容器过程
  • OSI七层网络攻击行为及防范手段
  • 第100+5步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 5
  • 论文| Convolutional Neural Network-based Place Recognition - 2014
  • 基于微信小程序的自习室预约系统的设计与实现
  • 【机器学习】《机器学习算法竞赛实战》第7章用户画像
  • vue3新手笔记
  • 互联网大厂ssp面经之路:计算机网络part1
  • C语言程序设计每日一练(1)
  • Spring 统一功能处理
  • 【软设】知识点速记2
  • 激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍
  • ML.NET(二) 使用机器学习预测表情分析
  • YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!!
  • 【数据结构】初识数据结构与复杂度总结
  • 子域名是什么?有什么作用?
  • 学习 Rust 的第一天:基础知识
  • 电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术
  • 系统开发实训小组作业week7 —— 优化系统开发计划
  • golang的引用和非引用总结
  • 2024认证杯数学建模B题思路模型代码
  • 一种快速移植 OpenHarmony Linux 内核的方法
  • java的jar包jakarta.jakartaee-web-api和jakarta.servlet-api有什么区别
  • QT_day2
  • Advanced RAG 02:揭开 PDF 文档解析的神秘面纱
  • Spring面试题pro版-1
  • 6 Reverse Linked List
  • 【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)
  • 2024免费Mac电脑用户的系统清理和优化软件CleanMyMac