首页
学习
活动
专区
工具
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

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

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

    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

    前端路由跳转基本原理

    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

    微前端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

    HTML 面试要点:History 和 Hash 路由方式

    本身是用来做页面跳转定位的,如 https://cellinlab.xyz/#/home 的 hash 即 #/home 散列值不会随请求发送到服务器端,所以改变 hash,不会重新加载页面 监听 window 的 hashchange...事件,当散列值改变时,可以通过 location.hash 来获取和设置 hash 值 location.hash 值的变化会直接反应到浏览器的地址栏 # 触发 hashchange 的情况 浏览器地址散列值的变化...window.location.hash = 'home'; let hash = window.location.hash; // '#home' window.addEventListener('hashchange...', function () { console.log('hashchange'); }); # history 模式 # 概述 window.history 属性指向 History 对象...); console.log(history.state); // { foo: 'bar' } 注意:如果 pushState 的 URL 参数设置了一个新的锚点值(即 hash),并不会触发 hashchange

    81920

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券