vue实现通用分页控件,支持前端分页、后端分页。

简介: vue实现通用分页控件,支持前端分页、后端分页。

分页这个功能可以说在开发管理系统中是必不可少的东西

为何分页?

答:因为数据量大,不可能全部给你展示,全部展示页面加载慢,且要不断下滑查看,体验差

谁做分页?

答:对于数据增长比较频繁的,比如订单列表通常后端来做这个分页;对于数据量增长缓慢数据量不大的,比如商品列表、分类列表、员工列表,前端来做分页是不错的选择

分页如何做?

答:

后端实现

通常后端提供一个接口,需要前端传入,页码,每页显示数据条数等参数,后端根据该参数分页查询返回数据。前端需要更新列表数据渲染,那么前端分页控件就只需要调用接口(动态传参),如图每个按钮绑定页码值等参数,点击则调用接口,如何知道有多少页?这个后端接口会做统计查询返回给前端的,前端计算:总数/每页展示数得到总页数,并进行渲染按钮

前端实现

后端会把所有数据全部返回,前端需要做的就是把全部数据列表做分割,按页展示,分页控件分页函数根据页码等参数截取列表的数据

实现这个通用分页控件:

我这里是基于el-pagination分页组件进行封装的一个精简版大家可以按需扩展。

需求:既能兼容后端分页,又可以在前端实现分页

1.自定义属性

如果是后端做分页的话,就传递count属性值这个属性代表总数据量,需要用来计算总页数

如果是前端做分页,就传递itemList属性值,这个属性表示总数据数组,根据这个数组的长度可以计算页数,根据页码可以对数组进行截取并把截取的单页数据通过自定义事件传递给父组件,父组件更新列表数据渲染

const props = defineProps({
    itemList: {//数据列表
        type: Array,
        default: null
    },
    count: {//有值则分页功能后端实现
        type: Number,
        default: null
 
    },
 
})

2.自定义事件

通过自定义事件可以把页码或者是分页后的数据传递给父组件

3.示例代码

分页控件完整代码:

<script lang="ts" setup>
import { ref,onBeforeUpdate} from 'vue'
 
const emit = defineEmits(['updateItemList']);
// 接收父组件传递的数据()
const props = defineProps({
    itemList: {//数据列表
        type: Array,
        default: null
    },
    count: {//有值则分页功能后端实现
        type: Number,
        default: null
 
    },
 
})
//--------------------------------------------------------数据分页------------------------------------------------------------------
const itemList = ref([])//待分页全部数据
const limitItemList = ref([])//分页后数据
const currentPage = ref(1); // 当前页码默认
const pageSize = ref(10); // 每页显示数量
//全部数据按每页展示数量、页码截取
const displayedItemList = () => {
    const startIndex = (currentPage.value - 1) * pageSize.value;
    const endIndex = startIndex + pageSize.value;
    limitItemList.value = itemList.value.slice(startIndex, endIndex);
};
 
//选中页设置为当前页
function changePage(page:number) {
    currentPage.value = page
  
}
//------------------------------------------------------------------------------------------------------------------------------------
 
//预处理
onBeforeUpdate(() => {
    if (props.count != null&&props.itemList==null) {
        emit('updateItemList', currentPage.value)
        return
    }
        itemList.value = props.itemList
        displayedItemList()
        emit('updateItemList', limitItemList.value)
})
</script>
<template>
    <div style="display: flex;justify-content: center;margin-top: 10px;">
        <el-pagination background="blue" layout="prev, pager, next"
            :total="props.count == null ? itemList.length : props.count"
            :current-page.sync="currentPage"
            :page-size="pageSize" 
            @current-change="changePage" 
            prev-text="上一页" 
            next-text="下一页">
        </el-pagination>
    </div>
</template>
1.如果后端做分页

要传递总数据量,以及触发自定义事件(在该自定义事件的回调函数可以进行接口调用更新数据)

 <div>
      <Limit :count="count" @updateItemList="getItemList"></Limit>
    </div>
//接收分页组件传递的页码
const getItemList = async (page:number) => {
  console.log('接收:')
  console.log(page)
  if (page != null) {
    loadingItemList.value = true
    //分页查询接口
    const res = await orderListApi(activeName_order_status.value, page)//传递页码
    orderList.value = res.data.data
    count.value = parseInt(res.data.count)
   
  }
}
2.如果前端做分页

要传递所有数据的数组

 <div>
      <Limit :itemList="itemList" @updateItemList="getLimitItemList" />
 </div>
//接收分页组件分页后的每页数据
const getLimitItemList = (displayedItemList: Array<Object>) => {
  console.log("接收:")
  console.log(displayedItemList)
  limitItemList.value = displayedItemList
}


目录
相关文章
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1209 1
|
9月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
374 5
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
751 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
728 70
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
693 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 算法 NoSQL
前端uin后端php社交软件源码,快速构建属于你的交友平台
这是一款功能全面的社交软件解决方案,覆盖多种场景需求。支持即时通讯(一对一聊天、群聊、文件传输、语音/视频通话)、内容动态(发布、点赞、评论)以及红包模块(接入支付宝、微信等第三方支付)。系统采用前后端分离架构,前端基于 UniApp,后端使用 PHP 框架(如 Laravel/Symfony),配合 MySQL/Redis 和自建 Socket 服务实现高效实时通信。提供用户认证(JWT 集成)、智能匹配算法等功能,助力快速上线,显著节约开发成本。
516 2
前端uin后端php社交软件源码,快速构建属于你的交友平台
|
12月前
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
720 0
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
819 9
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
612 6
|
11月前
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
3120 1

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1179
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    521
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    405
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    399
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    514
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    685
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1240
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    278
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1028
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    478