首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端路由原理解析和实现

hash 实现 hash是 URL 中 hash(#) 及后面的那部分,常用作锚点在页面内进行导航,改变 URL 中的 hash 部分不会引起页面刷新 通过 hashchange 事件监听 URL 的变化...,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL、通过 标签改变 URL、通过 window.location改变 URL,这几种情况改变 URL都会触发 hashchange 事件...history实现 history 提供了 pushState和 replaceState 两个方法,这两个方法改变 URL 的 path 部分不会引起页面刷新 history 提供类似 hashchange...好在我们可以拦截 pushState/replaceState的调用和 标签的点击事件来检测 URL 变化,所以监听 URL 变化可以实现,只是没有 hashchange 那么方便。...hashchange 事件window.addEventListener('DOMContentLoaded', onLoad)// 监听路由变化window.addEventListener('hashchange

97820
您找到你想要的搜索结果了吗?
是的
没有找到

令人惊叹的前端路由原理解析和实现方式

hash 实现 hash 是 URL 中 hash (#) 及后面的那部分,常用作锚点在页面内进行导航,改变 URL 中的 hash 部分不会引起页面刷新 通过 hashchange 事件监听 URL...的变化,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL、通过标签改变 URL、通过window.location改变URL,这几种情况改变 URL 都会触发 hashchange 事件...history 实现 history 提供了 pushState 和 replaceState 两个方法,这两个方法改变 URL 的 path 部分不会引起页面刷新 history 提供类似 hashchange...好在我们可以拦截 pushState/replaceState的调用和标签的点击事件来检测 URL 变化,所以监听 URL 变化可以实现,只是没有 hashchange 那么方便。...-- 渲染路由对应的 UI -->         JavaScript 部分: // 页面加载完不会触发 hashchange

1.6K30

微前端07 : 对single-spa的路由管理及微应用状态管理的分析

我们同时看看代码: // 代码片段1 if (isInBrowser) { // 对应流程图第1步 window.addEventListener("hashchange", urlReroute...listenerFn) { if (typeof listenerFn === "function") { // 这里省略许多代码... // 如果eventName为hashchange...首先,监听hashchange、popstate事件本身;其次,拦截设置hashchange、popstate监听事件的监听函数;再次,拦截可能改变路由状态的api方法;最后,提供一个全局的工具函数,方便用户改变路由状态...重写的内容其实也很简单,如果将要监听的事件是hashchange或popstate,则将相应的回调函数保存在一个数组中,待合适的时机进行批量执行,同时监听函数返回。...如果所要监听的函数不是hashchange或popstate,则调用原始的window.addEventListener或window.removeEventListner注册对应的监听事件。

1.4K10

前端路由跳转基本原理

Hash 1.1 相关 Api Hash 方法是在路由中带有一个 #,主要原理是通过监听 # 后的 URL 路径标识符的更改而触发的浏览器 hashchange 事件,然后通过获取 location.hash...得到当前的路径标识符,再进行一些路由跳转的操作,参见 MDN kk:返回完整的 URL location.hash:返回 URL 的锚部分 location.pathname:返回 URL 路径名 hashchange...1.2 实例 这里简单做一个实现,原理是把目标路由和对应的回调记录下来,点击跳转触发 hashchange 的时候获取当前路径并执行对应回调,效果: ?...但是这样会引发重新引发 hashchange 事件,第二次进入 render 。所以我们需要增加一个标志位,来标明进入 render 方法是因为回退进入的还是用户跳转 ?...代码实现参考 CodePen ---- 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 参考: history | MDN hashchange

1.6K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券