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
}


目录
相关文章
|
9月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
882 1
|
5月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
270 5
|
10月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
596 70
|
9月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
525 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
9月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
407 22
|
8月前
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
477 0
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1233 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
442 0
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
616 6

热门文章

最新文章

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