vue做移动端上拉加载 删除当前列表某个数据 保持当前状态 继续获取下一页不影响正常的数据

在这里插入图片描述

本文中使用vant组件的list列表制作的 当然主要是看这个难题的思路 不必计较用的什么组件库 换做其他的组件库 思路还是一样的

//主要思路是把点击删除的数据让后端置为false
// 比如我请求了3页,一页10条数据
// 一共30条,我一条一条删除,点击删除之后调用后端删除接口,
// 但是不能调用刷新接口,不然我请求的3页数据就会重置到第一页,
// 我可以把每次分页请求的数据保存在前端data的数组里,调用后端删除接口后,这样进行删除前端的列表实现视觉效果,这样列表的状态还在第三页
// 问题,当我删除了25条数据,我再次上拉加载获取更多的数据的时候,
// 传输的页数应该是第4页了吗?还是第一页,?? 所以问题变得复杂 我们为了不影响数据 可以前端删除调用接口 后端不进行删除 而是给个状态置为false
// 这样前端不会影响页数的数据 直接v-if判断是true就进行显示 否则隐藏
// 如果后端真的想要删除 我们可以退出来当前的列表页 或者在其他界面 或者进行刷新的时候(刷新肯定会置为第一页的) 调用一个接口告诉
// 后端 你可以进行删除状态是false的数据了

<template><div><van-listv-model="loading":finished="finished"finished-text="没有更多了"@load="onLoad"><template v-for="(item, index) in list"><template v-if="item.change"><div style="display: flex; align-items: center; height: 130px"><van-cell :key="item.id" :title="`${item.name}${item.id}`" /><div style="width: 50px" @click="deleteItem(item.id)">删除</div></div></template></template></van-list></div>
</template>
<script>
</script>
<script>
export default {//主要思路是把点击删除的数据让后端置为false//     比如我请求了3页,一页10条数据// 一共30条,我一条一条删除,点击删除之后调用后端删除接口,// 但是不能调用刷新接口,不然我请求的3页数据就会重置到第一页,// 我可以把每次分页请求的数据保存在data的数组里,这样进行删除,这样列表的状态还在第三页// 问题,当我删除了25条数据,我再次上拉加载获取更多的数据的时候,// 传输的页数应该是第4页了吗? 所以问题变得复杂  我们为了不影响数据 可以前端删除调用接口 后端不进行删除 而是给个状态置为false//   这样前端不会影响页数的数据  直接v-if判断是true就进行显示 否则隐藏// 如果后端真的想要删除  我们可以退出来当前的列表页 或者在其他界面 或者进行刷新的时候(刷新肯定会置为第一页的) 调用一个接口告诉// 后端 你可以进行删除状态是false的数据了data() {return {list: [],loading: false,finished: false,pageCurrent: 1,pageSize: 10,count: "",//模拟后端存放的数据addlist: [{ id: 1, name: "list ", change: true },{ id: 2, name: "list ", change: true },{ id: 3, name: "list ", change: true },{ id: 4, name: "list ", change: true },{ id: 5, name: "list ", change: true },{ id: 6, name: "list ", change: true },{ id: 7, name: "list ", change: true },{ id: 8, name: "list ", change: true },{ id: 9, name: "list ", change: true },{ id: 10, name: "list ", change: true },{ id: 11, name: "list ", change: true },{ id: 12, name: "list ", change: true },{ id: 13, name: "list ", change: true },{ id: 14, name: "list ", change: true },{ id: 15, name: "list ", change: true },{ id: 16, name: "list ", change: true },{ id: 17, name: "list ", change: true },{ id: 18, name: "list ", change: true },{ id: 19, name: "list ", change: true },{ id: 20, name: "list ", change: true },{ id: 21, name: "list ", change: true },{ id: 22, name: "list ", change: true },{ id: 23, name: "list ", change: true },],};},methods: {changePageData(pageCurrent, pageSize) {const data = this.addlist;//   获取时时的真实条数;const changlength = data.filter((item, index, arr) => {return item.change == true;});const newdata = data.slice((pageCurrent - 1) * pageSize,pageCurrent * pageSize);return { list: newdata, count: changlength.length };},deleteByid(id) {this.addlist.forEach((item, index, arr) => {item.id == id ? (this.list.change = false) : "";});},onLoad() {setTimeout(() => {const data = this.changePageData(this.pageCurrent, this.pageSize);console.log(data);if (data.list.length < this.pageSize) {this.list.push(...data.list);this.finished = true;} else {this.list.push(...data.list);this.count = data.count;this.pageCurrent += 1;// 加载状态结束this.loading = false;// 数据全部加载完成if (this.list.length >= this.count) {this.finished = true;}}}, 1000);},deleteItem(id) {this.list.forEach((item, index, arr) => {item.id == id ? this.list.splice(index, 1) : "";});this.deleteByid(id);// 有时候会删除数据不足会自动请求   有时候不会自动请求就手动请求//   如果后端没数据了 就别在请求onLoad//这里的3是屏幕上只显示3条数据的时候 你可以设置自己一屏占满的是多少条数据if (this.list.length <= 3 && this.list.length <= this.count) {if (!this.finished) {this.onLoad();}}},},
};
</script><style lang="less" scoped>
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库复习

select 查询 字段别名用 as (可以为中文) 例如 select distinct 关键字 去重复值 例如select distinct deptno from test where 条件过滤 and or 和 not运算符 and同时成立 or有一个成立就可以了 优先级and>or>not不符合&#xff08;!&#xff09; in 匹配多个值 selec…

AIGC之文本内容生成概述(下)——Transformer

在上一篇文章中&#xff0c;我们一口气介绍了LSTM、Word2Vec、GloVe、ELMo等四种模型的技术发展&#xff0c;以及每种模型的优缺点与应用场景&#xff0c;全文超过一万字&#xff0c;显得冗长且繁杂&#xff0c;在下文部分我们将分开介绍Transformer、BERT、GPT1/GPT2/GPT3/Cha…

让小程序动起来-轮播图的两种方式--【浅入深出系列002】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步&#xff0c;就是找到文件。第二步&#xff0c;先改动一下最显眼…

Elasticsearch 介绍及java集成

一、Elasticsearch 基础介绍 ElasticSearch 是分布式实时搜索、实时分析、实时存储引擎&#xff0c;简称&#xff08;ES)&#xff0c; 成立于2012年&#xff0c;是一家来自荷兰的、开源的大数据搜索、分析服务提供商&#xff0c;为企业提供实时搜索、数据分析服务&#xff0c;…

配置需求分类中的科目分配

其中科目分配的内容都为灰色无法修改 结果是在科目分配里面单独维护的&#xff1a; 路径&#xff1a;销售分销-基本功能-科目分配/成本-维护成本科目分配的需求类别

被B站用户高赞的广告文案:暴涨900万播放

今年6月&#xff0c;B站公布第一季度财报数据&#xff0c;B站日均活跃用户达9370万&#xff0c;月活3.15亿。在高月活的基础上&#xff0c;用户日均使用时长已经到了96分钟&#xff0c;日均视频播放量达41亿。 来源-B站 用户属性年轻、活跃度高已经成为B站典型的平台标签&…

DataTable数据对比

DataTable数据对比 文章目录 DataTable数据对比前言一、计算DataTable差集结构不同的情况结构相同的情况 二、计算DataTable交集结构不同的情况结构相同的情况 三、计算DataTable的并集合两个DaTable结构相同的情况计算并集 前言 开发中我们经常会出现查询数据库后返回DataTab…

详解GPT技术发展脉络

文章目录 前言关于本篇的分享内容大语言模型大模型语言模型 百花齐放TransformerAuto-RegressiveResnetLayer-NormMaskScaled Dot-Product AttentionMulti-Head AttenionSelf-AttentionPositional Encoding关于并行计算关于长程依赖Transformer演化 GPT SeriesGPT-1GPT-2GPT-3 …

文档翻译成中文怎么弄?今天分享文档翻译免费要怎么弄

有一天&#xff0c;小华来到了一个外国小镇。然而&#xff0c;他发现镇上的路牌、菜单和旅游手册都是用外语写的&#xff0c;让他感到非常困扰。他不知道该去哪里游玩&#xff0c;也无法理解当地的文化和历史。他非常喜欢这个小镇的风景&#xff0c;但是他无法读懂他们这里的一…

04.MySQL——用户管理

用户管理 用户管理的价值 用户 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 use mysql;select host,user,authentication_string from user;host&#xff1a; 表示这个用户可以从哪个主机登陆&#xff0c;如果是localhost&#xff0c;表示只能从…

Redis的4种分布式限流算法

限流 服务系统流量多,的确是一件好事,但是如果过载,把系统打挂了,那大家都要吃席了。 所以,在各种大促活动之前,要对系统进行压测,评估整个系统的峰值QPS,要做一些限流的设置,超过一定阈值,就拒绝处理或者延后处理,避免把系统打挂的情况出现。 限流和熔断有什么区…

包的使用及其创建

文章目录 前言类名冲突完整的类路径创建包导入类包总结 前言 java语言中&#xff0c;包在整个管理过程中发挥了重要的作用。使用包&#xff0c;可以有效地管理繁多的类文件&#xff0c;解决了类名重复的问题。在类中应用包和权限修饰符&#xff0c;可以控制他人对类成员的方法的…