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

news2025/1/9 14:42:44

在这里插入图片描述

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

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

<template>
  <div>
    <van-list
      v-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.coloradmin.cn/o/757140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SU-03T语音模块

一、官网 智能公元/AI产品零代码平台 在官网中可以添加设备进行配置&#xff0c;SDK的下载 二、烧录SDK 产品实物&#xff1a; 第一步&#xff1a;接线 烧录SDK时接线&#xff1a;4根杜邦线与USB转TTL连接 B6接TX&#xff0c;B7接RX&#xff0c;GND接GND&#xff0c;VCC接…

创建一门简单的解释性编程语言并实现它的解释器

背景 最近刷到大佬的教程&#xff0c;跟着学一下 效果 开始时 输入姓名和年龄后 代码 自创编程语言SimpleScript: 自创一门简易脚本支持中文编程 (gitee.com) 解析 1.词法分析 将程序的每个字符串精准划分出来&#xff0c;形成多个单词Token 2.语法分析 将各段Token再…

Docker命令详解

一、帮助启动命令 启动docker : systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机启动&#xff1a;systemctl enable docker 查看docker概…

电动汽车路由问题的基准测试

摘要 有几家物流公司开始在日常运营中利用电动汽车&#xff08;EVs&#xff09;来减少温室气体污染。然而&#xff0c;电动汽车有限的驾驶范围可能需要在运行期间访问充电站。这些潜在的访问必须得到解决&#xff0c;避免不必要的长时间绕行。我们制定了电容式车辆路由问题&…

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲&#xff01;computed计算属性和watch监听属性 setup细讲!setup参数&#xff0c;steup&#xff08;props&#xff0c;context&#xff09;参数1.props&#xff0c;负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots&#xff0c; 插槽…

MySQL(六)主从复制

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

MySQL(详细)

目录 什么是数据库? 数据库操作 表操作 数据库约束 表的设计 聚合查询 分组查询 联合查询 (多表查询) 索引 事务 JDBC 什么是数据库? 数据库是一类软件 , 它是用来组织、保存、管理数据的.组织这些数据也是为了后续进行增删查改. MySQL 是一款开源免费的数据库. …

牛客网OR36 链表的回文结构

题目 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针head&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 链接&#xff1a;链表的回文结…

6.Java 修饰符

修饰符 &#xff08;访问修饰符、非访问修饰符&#xff09; 访问控制修饰符 Java中&#xff0c;可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default (即默认&#xff0c;什么也不写&#xff09;: 在同一包内可见&#xff…

前端|CSS(二)| pink老师

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;CSS 布局的三种机制 &#x1f407;普通流 &#x1f407;浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 &#x1f407;定位 ⭐️定位 ⭐️…

检测到目标Referrer-Policy响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy&#xff0c;这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时&#xff0c;会产生一个 HTTP 请求&#xff0c;用于获取新的页面内容&#xff0c;而在该请求的报头中&#xff0c;会包含一个…

sparkSQL UDF

sparksql只能创建UDF&#xff0c;使用 SparkSession.udf.register() def num_count(num):return num*10#自定义方法名&#xff0c;调用的函数(包含逻辑)&#xff0c;返回值 udf2 spark.udf.register("udf1",num_count,IntegerType())#第二个参数是udf的处理逻辑&am…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …

全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试 前言 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递…

高数笔记4(第一章函数 极限 连续-极限的计算2)

目录 概述&#xff08;5&#xff09;利用夹逼准则求极限&#xff08;后面几个方法一般用来求数列极限&#xff09;例66例68&#xff08;结论&#xff0c;需要记住&#xff09;例69&#xff08;上题的运用&#xff0c;需要数形结合&#xff0c;找出各个区间最大的&#xff09;例…

栈和队列详解

目录 一&#xff0c;栈的概念及其结构 二&#xff0c;栈的方法及其实现 2.1 栈 2.2 push(int val) - 进栈 2.3 pop() - 出栈 2.4 peek() - 得到栈顶元素 2.5 size() - 栈的大小 2.6 empty() 2.7 isFull() 三&#xff0c;队列的概念及其结构 四&#xff0c;队列的方法及…

面试题之MySQL事物的特性和锁

在关系性数据库管理系统配置&#xff0c;一个逻辑工作要成为事物&#xff0c;必须要满足4个特性&#xff0c;即所谓的ACID:原子性(Atomicity),一致性(Consistency)、隔离性(lsolation)和持久性(Durability)。 原子性: 原子性:事物作为一个整体被执行&#xff0c;包含在其中对…

Maven安装步骤

Maven官网下载安装包&#xff1a; https://maven.apache.org/download.cgi Maven下载官网 解压安装包 在环境变量中配置 MAVEN_HOME 和 Path 打开cmd&#xff0c;输入mvn -v查看安装成功

用Inno Setup6.2.1对Pyinstaller打包的python可执行文件exe做代码签名,签名工具用微软件SignTool

说明&#xff1a;使用本博文的前提条件是&#xff0c;你已经将代码打包成可执行文件exe&#xff0c;现在是用Inno Setup6.2.1做安装包&#xff0c;以及给exe、及安装包exe、卸载exe做代码签名 一、准备工具 1、下载 下载 https://visualstudio.microsoft.com/zh-hans/visual-…

简单扫码登录原理分析与本地测试

前言 参考&#xff1a;https://www.cnblogs.com/johnlearning/p/16205875.html 前言&#xff1a;简单分析扫码登录流程。 场景&#xff1a;以网页版微信为例&#xff0c;我们在 PC 端点击二维码登录后&#xff0c;浏览器页面会弹出二维码图片&#xff0c;此时打开手机微信扫…