工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办

简介: 工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办

有这么个场景,后端接口的列表数据没有做分页给我,相当于是直接返回所有的列表数据,比如有100条就返回100,但是前端显示,则需要做成分页,比如10条为一页。

一、如何使用elementUI+vue实现前端分页

假如你用vue来实现,思路就是将数据切割,然后分批显示。

所以可以使用 computed 计算属性和 v-for 指令来实现前端分页。

因为后端返回给你的数据,你一般会整个存放在一个数组中,要显示第一页,其实就是在该数组中分割提取下标为0-9的数据项,如果是第三页,则在该数组中提取第20-29的数据项,创建一个计算属性,在该计算属性中完成数据的提取,再给到视图即可。

如果我需要结合elementUI的分页组件,怎么实现呢?以下是实现方式,做得跟后端给的分页一样的效果。

<!--这里的paginatedData就是根据list进行切割的计算属性-->
<el-table :data="paginatedData" border style="width: 100%">
  <el-table-column type="index" label="序号" :index="indexMethod" width="60" header-align="center" align="center"> </el-table-column>
        <el-table-column prop="customerName" label="客户名称" min-width="130"> </el-table-column>
        <el-table-column prop="chainName" label="业务名称" min-width="120"> </el-table-column>
        <el-table-column prop="statisticsPeriod" label="统计周期" min-width="80"> </el-table-column>
        <el-table-column prop="dateCycle" label="时间周期" min-width="150"> </el-table-column>
</el-table>     
<!--这里的pagination分页组件不需要做任何改动-->
<div class="pagination-container">
        <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.page" :page-sizes="[10, 30, 50]" :page-size="listQuery.pageNum" layout="total, sizes, prev, pager, next, jumper" :total="totalNum"> </el-pagination>
</div>
<script>
export default {
  data() {
    return {
      list: [] //后端接口给的列表数据(未分页,全部返回)
    }
  },
  created() {
    //请求后端数据
    this.getList();
  },
  computed: {
    // 使用前端实现分页的计算数据
    paginatedData() {
      // 分页的起始下标
      const startIndex = (this.listQuery.page - 1) * this.listQuery.pageNum;
      // 分页的末尾下标
      const endIndex = startIndex + this.listQuery.pageNum;
      // 返回切割后的数据
      return this.list.slice(startIndex, endIndex);
    },
    // 总条数
    totalNum() {
      return this.list.length;
    },
    // 总分页数
    total() {
      return Math.ceil(this.list.length / this.listQuery.pageNum);
    }
  },
  methods:{
   //数据
   getList() {
      //调用后端接口
      staticsList().then((res) => {
        this.list = res.data;
      });
    },
    // 每页列表数
    handleSizeChange(val) {
      this.listQuery.pageNum = val;
    },
    // 当前分页数(第几页)
    handleCurrentChange(val) {
      this.listQuery.page = val;
    },
  }
}    
</script>

这样就可以实现前端分页了。

二、通用的前端分页代码

如果你的项目中,不是用elementUI框架,其实也很好办,主要是记住以上前端分页的思路:找到某一页的开始下标和结束下标,然后去分割数组,返回给视图。

以下是一个示例代码:

<template>
  <div>
    <ul v-for="item in paginatedData" :key="item.id">
      <!-- 显示需要显示的数据 -->
        <li>{{item.name}}</li>
    </ul>
    <div>
      <!-- 显示分页控件 -->
      <button v-for="pageNumber in totalPages" :key="pageNumber" @click="currentPage = pageNumber">
        {{ pageNumber }}
      </button>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      data: [], // 假如这里就是你通过接口获取到的所有的数据(未分页)
      itemsPerPage: 10, // 每页显示的数据量
      currentPage: 1 // 当前页码
    };
  },
  computed: {
    paginatedData() {
      const startIndex = (this.currentPage - 1) * this.itemsPerPage;
      const endIndex = startIndex + this.itemsPerPage;
      return this.data.slice(startIndex, endIndex);
    },
    totalPages() {
      return Math.ceil(this.data.length / this.itemsPerPage);
    }
  }
};
</script>

在这个示例中,我们使用 v-for 指令来遍历每一页要显示的数据,并使用 slice() 方法来获取当前页码对应的数据。我们还计算了总页数,以便在分页控件中显示所有的页码。

在模板中,我们使用 v-for 指令来遍历每一页要显示的数据,并在分页控件中使用 v-for 指令来显示所有的页码。我们在每个页码按钮上绑定了一个 click 事件,点击按钮时会更新当前页码。

如果你在web前端开发、面试、前端学习路线有困难可以加我V:imqdcnn。免费答疑,行业深潜多年的技术牛人帮你解决bug。

祝你能成为一名优秀的WEB前端开发工程师!

相关文章
|
存储 前端开发 安全
前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
本文全面解析前端三种数据存储方式:Cookie、LocalStorage与SessionStorage。涵盖其定义、使用方法、生命周期、优缺点及典型应用场景,帮助开发者根据登录状态、用户偏好、会话控制等需求,选择合适的存储方案,提升Web应用的性能与安全性。(238字)
794 0
|
9月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
891 1
|
5月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
274 5
|
11月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
598 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
10月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
600 70
|
9月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
529 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
8月前
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
480 0
|
11月前
|
前端开发 算法 NoSQL
前端uin后端php社交软件源码,快速构建属于你的交友平台
这是一款功能全面的社交软件解决方案,覆盖多种场景需求。支持即时通讯(一对一聊天、群聊、文件传输、语音/视频通话)、内容动态(发布、点赞、评论)以及红包模块(接入支付宝、微信等第三方支付)。系统采用前后端分离架构,前端基于 UniApp,后端使用 PHP 框架(如 Laravel/Symfony),配合 MySQL/Redis 和自建 Socket 服务实现高效实时通信。提供用户认证(JWT 集成)、智能匹配算法等功能,助力快速上线,显著节约开发成本。
386 1
前端uin后端php社交软件源码,快速构建属于你的交友平台
|
11月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
12月前
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
584 9

热门文章

最新文章