- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
本文由简悦SimpRead转码,原文地址
当浏览器地址栏中的URL发生变化时,会请求对应的网络资源,而负责响应这个网络资源的服务就称
为路由。在早期的Web开发中,路由都是交由服务端处理,但随着前端技术的快速发展,路由模块逐
渐转移交给了前端进行控制,而路由转移到前端,正是前后端分离和单页应用架构的基石。这一
我们来深入理解前端路由的技术细节。
前端路由实现基础
默认情况下,当地址栏的URL发生变化时,浏览器会向服务端发起新的请求。所以实现前端路由的重
要基础就是在修改URL时,不引起浏览器向后端请求数据。根据浏览器提供的API,有下面两种实现方
案。
基于hash实现
前面提到当URL变化时浏览器会发送请求,但有一种特例,那就是hash值的变化不会触发浏览器发起
请求。
hash值是指URL“#”号后面的内容,通过location.hash属性可以读写hash值,这个值可以让浏览器
将页面滚动到ID与hash值相等的DOM元素位置,不会传给服务端。
要它的变化也比较简单,通过window对象的hashchange就可以感知到它的变化。
这种实现方式占用了hash值,导致默认的页面滚动行为失效,对于有滚动定位需求的情况需要自行手
动获取元素的位置并调用BOM相关API进行滚动。
基于history实现
HTML5提出了一种更规范的前端路由实现方式,那就是通过history对象。
history提供了两个函数来修改URL,即history.pushState()和history.replaceState(),这两个API可
以在不进行刷新的情况下,来操作浏览器的记录。唯一不同的是,前者是新增一个记录,后
者是直换当前的记录。
URL变化则可以通过window对象上的popstate来实现。但需要注意的是,
history.pushState()或history.replaceState()不会触发popstate,这时我们需要手动触发页面渲
染。
虽然能通过这种方式实现前端路由功能,但并不能浏览器默认的请求行为,当用户修改地址栏
时还是会向服务端发起请求,所以还需要服务端进行设置,将所有URL请求转向前端页面,交给前端
进行解析。
下面是vue-router官网的Nginx配置例子:表示对于匹配的路径,按照指定顺序依次检查对应路径文
件是否存在,对应路径是否存在,如果没有找到任何文件或,就返回index.html。而
index.html就会引入对应的JavaScript代码在浏览器端进行路由解析。
location/{
try_files$uri$uri//index.html;
}
路由解析
浏览器在URL变化时向后端发送请求,就需要对路由进行解析了。vue-router和react-
router都同时依赖了一个第库Path-to-RegExp进行路由解析,下面通过分析path-to-regexp1.8
版本的源码来理解路由是如何被解析的。
路由解析又分为两个操作:路由匹配和路由生成。
路由匹配
路由匹配就是当获取到请求路径后,如何找到对应的配置路径。在path-to-regexp源码中对应的是默
认导出函数pathToRegexp(),该函数接收3个参数:
path,必传参数,值可以为自定义的请求路径,如/user/:id,也可以是正则表达式,还可以是两
者组成的数组;
keys,可选参数,值为数组,数组元素为解析正则表达式风格的字符串或冒号开头的占位符
(下文简称为“特殊字符串”)生成的令牌,比如字符串/user/:id对应的keys为{name:id,
delimiter:/,optional:false,repeat:false},这个参数的值最终会被保存到返回的正则表达式对
象的keys属性中,可用于后面的路由生成;
options,可选参数,执行过程中的配置信息,比如是否大小写敏感。
函数返回值是一个带有keys属性的正则表达式,key
您可能关注的文档
- 办公软件高级应用练习题.pdf
- 创业典型材料大赛自行车.pdf
- 学生语法课件十章-一课时.pdf
- 一批大修工程集镇竣工说明.pdf
- 抗凝对肝硬化上消化道出血影响回顾性多中心研究federica cerini.pdf
- 六单元陈涉世家课件.pdf
- 《YY 0792-2024眼科仪器 眼内照明器》.pdf
- YY 0792-2024眼科仪器 眼内照明器.pdf
- 中国行业标准 YY 0792-2024眼科仪器 眼内照明器.pdf
- 《YY/T 0063-2024医用电气设备 医用诊断X射线管组件 焦点尺寸及相关特性》.pdf
- 中国国家标准 GB/T 4214.17-2024家用和类似用途电器噪声测试方法 干式清洁机器人的特殊要求.pdf
- GB/T 4214.17-2024家用和类似用途电器噪声测试方法 干式清洁机器人的特殊要求.pdf
- 《GB/Z 43202.1-2024机器人 GB/T 36530的应用 第1部分:安全相关试验方法》.pdf
- GB/Z 43202.1-2024机器人 GB/T 36530的应用 第1部分:安全相关试验方法.pdf
- 中国国家标准 GB/Z 43202.1-2024机器人 GB/T 36530的应用 第1部分:安全相关试验方法.pdf
- 中国国家标准 GB/T 32455-2024航天术语 运输系统.pdf
- GB/T 32455-2024航天术语 运输系统.pdf
- 《GB/T 32455-2024航天术语 运输系统》.pdf
- GB/T 44369-2024用于技术设计的人体运动生物力学测量基础项目.pdf
- 中国国家标准 GB/T 44369-2024用于技术设计的人体运动生物力学测量基础项目.pdf
文档评论(0)