课程列表

习题链接

课程列表

任务

将获取的数据,展现到页面中,一次显示5条数据 有两个按钮,选择上一页和下一页 点击下一页,就显示下五条数据,如果后面没有数据了,要改变当前按钮的样式 点击上一页,就显示上五条数据,如果前面没有数据了,要改变当前按钮的样式

关键点

  1. axios请求数据的
    1. axios中最常用的就是get与psot,axios是基于promise的异步操作,所以是可以是使用then,catch方法来处理结果的,在本题里面就是一个简单的请求
    2. axios.get(地址)
      .then(res=>{当请求成功,返回的结果在此处操作})
      .catch(err=>{执行失败的操作})
      .finally(()=>{成功或失败都将执行的操作})
    3. 一点点的扩展知识(不看并不影响本次解题)
      1. 可以通过axios.interceptors对象来添加请求拦截器和响应拦截器
      2. axios是支持并发操作,可以使用axios.all,axios.spread方法来实现并发操作
  2. 操作数组的slice方法
    1. 提取数组的方法有slice(start,end) 从start开始截取直到end,end节点不会被截取。并不会修改原数组
    2. 使用filter也可以截取数组,并不会修改原数组

代码实现 && 完整的代码

  1. 获取数据
    let listdata = []; axios.get("js/carlist.json").then((res) => { listdata = res.data; // 将数据保存在这里 });
  2. 写一个渲染函数,只需要传入一个输入,就自动将数据渲染到页面中去
    function renderStr(data) { let template = ""; for (let i = 0; i < data.length; i++) { const element = data[i]; template += ` <a href="#" class="list-group-item list-group-item-action"> <div class="d-flex w-100 justify-content-between"> <h5 class="mb-1">${element.name}</h5> <small>${element.price ? element.price : 0}元</small> </div> <p class="mb-1"> ${element.description} </p> </a>`; } document.getElementsByClassName("list-group")[0].innerHTML = template; }
  3. 将获取数据和渲染函数结合使用一下
    let listdata = []; axios.get("js/carlist.json").then((res) => { listdata = res.data; maxPage = (res.data.length / 5) | 0; // 获取最大页面,使用|0是向下取整的 所以可能导致还有的页面未算入 maxPage * 5 - (res.data.length / 5) != 0 ? maxPage++ : ''; // 对前面未算入的页面进行补偿 renderStr(listdata.slice(0, 5)); // 先传入当前数组的前5条数据 });
  4. 两个点击按钮的实现
    // 点击上一页 let prev = document.getElementById("prev"); prev.onclick = function () { // TODO:待补充代码 if(--pageNum <= 1){ // 当前页到达了第一页的时候,意味着前面没有数据了就应该更改样式 prev.className = "page-item disabled"; pageNum = 1; // 因为前面使用了前置++所以这里需要将当前页重置到1 } next.className = "page-item"; // 点击了上一页,所以后面肯定是有数据了 renderStr(listdata.slice((pageNum - 1) * 5, (pageNum - 1) * 5 + 5)); }; // 点击下一页 此处同理 let next = document.getElementById("next"); next.onclick = function () { // TODO:待补充代码 if(++pageNum >= maxPage){ next.className = "page-item disabled"; pageNum = maxPage; } prev.className = "page-item"; renderStr(listdata.slice((pageNum - 1) * 5, (pageNum - 1) * 5 + 5)); };
  5. 完整code
    let pageNum = 1; // 当前页码,默认页码1 let maxPage; // 最大页数 // TODO:待补充代码 let listdata = []; axios.get("js/carlist.json").then((res) => { listdata = res.data; maxPage = (res.data.length / 5) | 0; maxPage * 5 - (res.data.length / 5) != 0 ? maxPage++ : ''; renderStr(listdata.slice(0, 5)); }); function renderStr(data) { let template = ""; for (let i = 0; i < data.length; i++) { const element = data[i]; template += ` <a href="#" class="list-group-item list-group-item-action"> <div class="d-flex w-100 justify-content-between"> <h5 class="mb-1">${element.name}</h5> <small>${element.price ? element.price : 0}元</small> </div> <p class="mb-1"> ${element.description} </p> </a>`; } document.getElementsByClassName("list-group")[0].innerHTML = template; } // 点击上一页 let prev = document.getElementById("prev"); prev.onclick = function () { // TODO:待补充代码 if(--pageNum <= 1){ prev.className = "page-item disabled"; pageNum = 1; } next.className = "page-item"; renderStr(listdata.slice((pageNum - 1) * 5, (pageNum - 1) * 5 + 5)); }; // 点击下一页 let next = document.getElementById("next"); next.onclick = function () { // TODO:待补充代码 if(++pageNum >= maxPage){ next.className = "page-item disabled"; pageNum = maxPage; } prev.className = "page-item"; renderStr(listdata.slice((pageNum - 1) * 5, (pageNum - 1) * 5 + 5)); };

__EOF__

本文作者GTK
本文链接https://www.cnblogs.com/DnmyCourage/p/17450865.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   GTK  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示