二级目录商品分类

本文介绍了如何使用axios进行异步请求,获取商品的一级和二级分类数据,然后将这些数据合并并动态渲染到HTML页面的分类导航中。
摘要由CSDN通过智能技术生成

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8" />

  <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  <title>案例_分类导航</title>

  <link rel="stylesheet" href="./css/index.css">

</head>

<body>

  <!-- 大容器 -->

  <div class="container">

    <div class="sub-list">

      <div class="item">

        <h3>分类名字</h3>

        <ul>

          <li>

            <a href="javascript:;">

              <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />

              <p>巧克力</p>

            </a>

          </li>

          <li>

            <a href="javascript:;">

              <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />

              <p>巧克力</p>

            </a>

          </li>

          <li>

            <a href="javascript:;">

              <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />

              <p>巧克力</p>

            </a>

          </li>

        </ul>

      </div>

    </div>

  </div>

  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

  <script>

    /**

     * 目标:把所有商品分类“同时”渲染到页面上

     *  1. 获取所有一级分类数据

     *  2. 遍历id,创建获取二级分类请求

     *  3. 合并所有二级分类Promise对象

     *  4. 等待同时成功后,渲染页面

    */

    // 1. 获取所有一级分类数据

    axios({

      url: 'http://hmajax.itheima.net/api/category/top'

    }).then(result => {

      console.log(result)

      // 2. 遍历id,创建获取二级分类请求

      const secPromiseList = result.data.data.map(item => {

        return axios({

          url: 'http://hmajax.itheima.net/api/category/sub',

          params: {

            id: item.id // 一级分类id

          }

        })

      })

      console.log(secPromiseList) // [二级分类请求Promise对象,二级分类请求Promise对象,...]

      // 3. 合并所有二级分类Promise对象

      const p = Promise.all(secPromiseList)

      // 因为要同时展现数据所以要合并

      p.then(result => {

        console.log(result)

        // 4. 等待同时成功后,渲染页面

        const htmlStr = result.map(item => {

          const dataObj = item.data.data // 取出关键数据对象

          return `<div class="item">

        <h3>${dataObj.name}</h3>

        <ul>

          ${dataObj.children.map(item => {

            return `<li>

            <a href="javascript:;">

              <img src="${item.picture}">

              <p>${item.name}</p>

            </a>

          </li>`

          }).join('')}

        </ul>

      </div>`

        }).join('')

        console.log(htmlStr)

        document.querySelector('.sub-list').innerHTML = htmlStr

      })

    })

   

  </script>

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小程序员.¥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值