vant获取首页以及tab页面数据不重复提交解决方案

简介: vant获取首页以及tab页面数据不重复提交解决方案

vant自带的tab栏这里就不多说了写法如下:

<van-tabs v-model="active" swipeable @click="onClick">
      <van-tab v-for="(item, index) in list" :key="index" :title="item.name">
      </van-tab>
    </van-tabs>

首先要请求首页数据,因为列表项的数据在首页

this.$axios.get("index_category/data").then((v) => {console.log(v)})

6cf313b370f942b68bccf648006a91a8.png

之后定位到首页的九个列表项赋给:title即可渲染

this.list = v.data.data.category;

之后要通过这九个数据进行获取数据,所以需进行遍历

let arr = [];
      for (let i = 0; i < this.list.length; i++) {
        // 遍历整个索引
        console.log(i);
        let forward = i === 0 ? "after" : "before"; // 判断当前索引是否为0,不为则跳转before
        // console.log(forward);
        var obj = {
          list: [],
          forward: forward,
        };
        if (i === 0) {
          obj.list = v.data.data.data;
          console.log(obj.list);
        }
        arr.push(obj);
        this.newsItems = arr;
        // console.log(this.newsItems);
      }

打印的i如下:

8663f10d6197411f980f124dc246e4bc.png

这时新建一个变量forward用来单独分离首页数据,如果是首页则返回一个after,不是首页就返回before页面

打印的forward如下

26d9a305fb4e4284853ac0b9eb0d4ba5.png

之后创建一个对象obj'如下格式

var obj = {
          list: [],
          forward: forward,
        };

obj格式如下图:

36ba3a2a9f084eb1be5ff92087e7e71b.png

打印obj.forward则会显示有一个首页和多个分页

d48b5628e3c0452d9380a55fe5d34fb0.png

把obj中的空数组放在索引是0的判断里来对其obj.list添加获取的数据列表

dedfe0efdcbd498488ea1939039c885b.png

也就是如下代码

obj.list = v.data.data.data;

接下来就是把obj对象放在arr的新数组中

arr.push(obj)

30c4752dfbec4200809b6a321ac71720.png

mounted部分暂时完成了,因为let arr作用域问题所以要重新放在一个新数组中

this.newsItems = arr;

点击获取分页数据实现

当点击tab栏是出现获取数据,因为vant中自带了name属性用来接收索引所以这里直接拿name即可

b8c7a946462045d38963539e16955769.png

看所需代码:

onClick(name, title) {
      console.log(name);
      const btn = 1;
      console.log(this.newsItems[name]);
      if (this.newsItems[name].forward === "after") {
        return;
      } else {
          var id = this.list[name].id
          let obj = this.newsItems[name]
          var page = Math.ceil(obj.list.length / 5) + 1
          // console.log(id);
          // console.log(page);
          // console.log(obj); //obj获取到after以及before
          obj.forward ='before'
          console.log( obj.forward);
          this.$axios.get(`/index_category/${id}/data/${page}`).then((v) => {
             console.log(v);
             obj.forward ='after'
             console.log( obj.forward);
             var data = v.data.data
             obj.list = [...obj.list,...data]
             console.log(obj.list);
        });
      }
      /*       if (name != 0) {
        this.$axios.get(`/index_category/${name}/data/${btn}`).then((v) => {
          console.log(v);
        });
      } */
    },

这里详细说一下这一段代码

7841a112f16642ada5e2dd845d9d116d.png

name和title打印出来的分别是索引值以及名称

下面可以直接拿上个声明周期中的

this.newsItems[name]

9bf5d50f11f84839abaa4590abf05baf.png

可以看到,当点击手机页面时会获取一个数据,里面有之前的before状态以及list空列表

这里再说一下before是除了首页的其他项,after是首页

这时就可以直接判断它里面的forward值是不是等于after?如果是,就直接算在首页中也就直接return掉,如果不是首页那么就获取分页数据

因为分页数据格式如下图所示

1758b4324b9045ed9c1b58232c073ce7.png

所以这里要匹配对应的id以及page才能成功获取数据

这时我们可以打印一下this.list,这里的list是mounted状态中获取的首页数据

b011235e10a04fcb9cf8b8cd408630d0.png

获取每次点击对应的索引中的数据

this.list[name]

da32f9d800a8432291d5f1af867ba85e.png

创建一个变量用来接收对应的id值,这个id值正好就是获取分页数据的重要信息id,如果没有这个id则无法获取对应的数据源

var id = this.list[name].id

获取完id就要在获取page即可完成

打印对应的对象

this.newsItems[name]

67852ea430794922b066155f13d946c7.png

传给一个变量为obj

接下来就可以获取page了

这里数据只有一页所以我们这样计算即可

var page = Math.ceil(obj.list.length / 5) + 1

打印为1

接下来把所有的分页状态全部确定为before

obj.forward ='before'

然后请求数据

this.$axios.get(`/index_category/${id}/data/${page}`).then((v) => {
             console.log(v);
        });

e07ba7fc04c44425a9015de4b5b9d6f8.png

成功获取第二页数据!

之后把所有的before变为after

获取到v.data.data的三个对象给个变量data

724dc3f9d36942278f53e20482479ff5.png

把空的obj.list与data进行合并

0aee4b2980344fabacb78c14469da175.png

每次返回时不会重复提交 数据

用vant自带tab栏实现数据渲染

72e0641dd0f14b5b9a47151c2bf76968.png

784cd8b4689c435987e33726d94c68a4.png

这里定义一个currentIndex用来接收index索引

0ef2a194e6d548b59a8685758b5c3617.png

93de7d4a747b4d4396371f6eec48b0e8.png

这里封装一下分页数据

0d102a467cad4f52b5c4f26928521c6f.png


相关文章
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
959 0
|
Linux Docker 容器
到底什么是镜像(概念)
镜像到底是什么?镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。 1.UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
21464 0
|
8月前
|
人工智能 安全 API
大模型推理主战场:通信协议的标配
DeepSeek加速了模型平权,大模型推理需求激增,性能提升主战场从训练转向推理。SSE(Server-Sent Events)和WebSocket成为大模型应用的标配网络通信协议。SSE适合服务器单向推送实时数据,如一问一答场景;WebSocket支持双向实时通信,适用于在线游戏、多人协作等高实时性场景。两者相比传统HTTPS协议,能更好地支持流式输出、长时任务处理和多轮交互,满足大模型应用的需求。随着用户体量扩大,网关层面临软件变更、带宽成本及恶意攻击等挑战,需通过无损上下线、客户端重连机制、压缩算法及安全防护措施应对。
1021 176
大模型推理主战场:通信协议的标配
|
7月前
|
人工智能 边缘计算 分布式计算
《分布式软总线:AI动态推理架构的智能“建造师”》
分布式软总线是一种具备自组织特性的关键技术,可灵活构建适应人工智能动态推理需求的分布式计算架构。它通过自主设备发现、灵活组网、动态资源调度及自我修复机制,实现高效协同计算。在智能交通、智慧医疗和工业智能制造等领域,分布式软总线优化了实时数据处理与任务分配,推动了AI技术与行业应用的深度融合,为社会发展带来变革性影响。其核心优势在于去中心化设计,能快速响应动态需求并保障系统稳定性,助力复杂推理任务高效完成。
205 2
|
小程序 JavaScript
微信小程序的事件绑定方式
微信小程序的事件绑定方式
315 4
|
JavaScript 前端开发 索引
js添加、删除、替换、插入元素的方法
js添加、删除、替换、插入元素的方法
375 0
|
机器学习/深度学习 监控 算法
深度学习之3D人体姿态预测
基于深度学习的3D人体姿态预测是指利用深度学习模型,从图像或视频中自动估计人体的三维骨架结构或关节点位置。此任务在增强现实、动作捕捉、人体行为识别、虚拟现实等多个领域中有广泛应用。
348 3
|
存储 分布式计算 Java
Java在云计算中的应用如何?
Java在云计算中的应用如何?【8月更文挑战第11天】
482 4
|
机器学习/深度学习 算法 安全
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
Vue3——tdesign-vue-next如何按需加载动态渲染ICON
如题,在vue3中进行按需加载来动态的渲染icon图标;
384 1