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

监听load和hashchange事件

监听load和hashchange事件

上篇文章中,我们已经将菜谱的数据给拿到,并且已经可以渲染到页面上,本篇我们将为程序添加一些事件;

注:本项目来自于Jonas Schmedtmann创建,文章仅仅作为学习作用!

  • 菜谱的切换

我们通过之前的API也已经发现了,菜谱的获取是通过URL加上菜谱的hash值也获取到的

在这里插入图片描述

所以当我们点击切换菜谱的时候只需要在url后面加上菜谱的hash就可以获取到这个菜谱的,那么应该怎么做呢?

 <div class="search-results">
        <ul class="results">
          <a href="#664c8f193e7aa067e94e863b">菜谱1</a>
          <a href="#5ed6604591c37cdc054bc886">菜谱2</a>

在这里插入图片描述

  • 那边页面的变化我们就要通过一个监听事件,来监听如果hash发生变化的话,我们来重新调用渲染菜谱的页面;
window.addEventListener('hashchange', showRecipe);
  • 那接下里的话就简单,我们将我们硬编码的id更换成我们浏览器上面的id就可以实现页面的实时渲染了
try {
    const id = window.location.hash.slice(1);
    renderSpinner(recipeContainer);
    const res = await fetch(
      `https://forkify-api.herokuapp.com/api/v2/recipes/${id}`
    );

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 但是这里还有一个问题,当我们重新加载的时候会发现页面什么菜谱都没有,这是因为我们没有点击页面中还不知道该渲染怎么样的菜谱,很简单,加一个load事件就可以了
window.addEventListener('load', showRecipe);

在这里插入图片描述

  • 但是很明显,这是两个差不多的代码,我们不应该去重复它,这里我们可以选择使用一个数组循环的方法来实现多个事件调用同一个函数的问题;
['hashchange', 'load'].forEach(e => window.addEventListener(e, showRecipe));

这样的话我们就可以使用一行代码来代替多行代码了;

  • 细心的小伙伴还会发现一个问题,当我们的URL不存在id的时候,就会报错,因为js会将一个空的字符串向API中请求数据,这当然会报错;

在这里插入图片描述

这里我们简单的做一个的返回即可

if (!id) return;

本篇将是这个程序的核心功能,但是我们的代码并不是非常的清晰的书写,这时候就要谈谈我们在流程图里面所说的架构了!下篇文章见;

相关文章:

  • 从电子管到量子计算:计算机技术的未来趋势
  • 双足肌肉骨骼机器人 VS 传统钢铁结构机器人:科技新趋势与跨界创新
  • PyCharm Professional 2025 安装配置全流程指南(Windows平台)
  • vue2项目打包后js文件过大, 首次加载缓慢
  • Fisher散度:从信息几何到机器学习的隐藏利器
  • 【DeepSeek开源:会带来多大的影响】
  • LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)
  • ELK搭建初入
  • k8s集群3主5从高可用架构(kubeadm方式安装k8s)
  • 微机原理与汇编语言试题四
  • 【前端定位线上问题的多种方案(不依赖 Sentry)】
  • 【docker】docker pull拉取中不断重复下载问题,解决方案之一,磁盘空间扩容
  • 【Matlab仿真】Matlab Function中如何使用静态变量?
  • Solidity 开发环境
  • 【含文档+PPT+源码】基于微信小程序的农产品自主供销商城系统
  • 2.1部署logstash:9600
  • JavaWeb-GenericServlet源码分析(适配器/模板方法)
  • ref和reactive的区别 Vue3
  • Java进阶(vue基础)
  • 对比 Vue 中的 defineAsyncComponent 和 React 中的 lazy
  • 建设一个商城网站需要多少钱/最新经济新闻
  • 毕业设计代做网站jsp/地推是什么
  • 企业网站源码 企业网站管理系统/今日疫情最新消息
  • 金山做网站的公司/360社区app
  • 揭阳网站制作维护/seo网站自动发布外链工具
  • 自己做网站好还是凡科/互联网营销策划案