前端实现路由主要有两种方式:
第一种:通过location.hash实现前端路由
hash是指url中#后面的部门,这部分在服务器会被自动忽略,但是在浏览器中可以通过location.hash来获取。此方式主要是用到了onhashchange事件,这个事件可以监听url中的hash值变化,以此来进行一些DOM的切换操作。
onhashchange事件的触发条件有:
a、改变url地址,在最后面增加或改变其hash值
b、改变location.href或location.hash
c、点击带有锚点的链接
d、浏览器前进后退可能导致hash的变化,就是两个网页地址中的hash值不同
实现思路:
当浏览器地址栏url的hash值发生变化时,就会触发onhashchange事件,这时需要通过window.location.hash可以拿到当前浏览器的url的hash值,此时的hash值是带有#的。可以根据不同的hash值执行不同的回调函数,即加载相应的组件。
实现方式:
当hash值发生变化会触发此事件
window.addEventListener(‘hashchange’,fn)
第二种:利用window.history实现前端路由
window对象都有一个history属性,用来保存用户访问过的页面列表,我们在浏览网页时的前进和后退都是由这个对象来实现的。
在用history实现前端路由的过程中,主要使用到了history.pushState()和history.replaceState()这两个接口。二者均接收三个参数,分别是state,title,url,state用来存放将要插入history实体的相关信息,是一个json格式的参数;title是传入history实体的标题,firefox现在会自动忽略掉这个属性;url用来传递新的history实体的相对路径,如果其值为null则表示当前要插入的history实体与前一个实体一致,没有改变。
两者唯一的区别在于replaceState()方法会将最新一条的history实体覆盖掉,而不是直接添加。
这两个方法都不会主动触发浏览器页面的刷新,只是history对象包括地址栏的内容会发生改变,当触发前进后退等history事件时才会进行相应的响应。
浏览器的前进后退会触发window.onpopstate事件,通过绑定 popstate事件,就可以根据当前url地址中的查询内容让对应的菜单执行ajax载入,实现ajax的前进和后退效果。
————————————————
版权声明:本文为CSDN博主「April Gemini」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42357338/article/details/108436182
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构