09前端项目----分页功能

news2025/7/11 0:35:08

分页功能

    • 分页器的优点
    • 实现分页功能
      • 自定义分页器
        • 先实现静态分页器调试
          • 分页器动态数据/交互
        • Element UI组件

分页器的优点

分页器

电商平台同时展示的数据很多,所以采用分页功能

实现分页功能

Element UI已经有封装好的组件,但是也要掌握原理,以及自定义的分页器实现!
所以从两个方面实现:自定义和Element UI

自定义分页器

实现前需要数据:

  1. 当前在第几页——pageNo
  2. 每页展示多少条数据——pageSize
  3. 整个分页器一共有多少条数据——total
    (已知pageSize和total就可以知道分几页,需要向上取整)
  4. 连续的分页个数——continues(一般是5|7奇数)
先实现静态分页器调试

分页Pagination组件放在父组件Search,以上数据都需要父组件传给子组件Pagination。
先传入静态数据实现,之后再修改

<!-- Search.vue-->
<!-- 分页器-->
<Pagination :pageNo="1" :pageSize="3" :total="91" :continues="5"/>

静态页面效果

<template>
	<div class="fr page">
                        <div class="sui-pagination clearfix">
                            <ul>
                                <li class="prev disabled">
                                    <a href="#">«上一页</a>
                                </li>
                                <li class="active">
                                    <a href="#">1</a>
                                </li>
                                 <li class="dotted"><span>...</span></li>
                                 <!--中间部分遍历-->
                                <li>
                                    <a href="#">2</a>
                                </li>
                                <li>
                                    <a href="#">3</a>
                                </li>
                                <li>
                                    <a href="#">4</a>
                                </li>
                                <li>
                                    <a href="#">5</a>
                                </li>
                                <li class="dotted"><span>...</span></li>
                                <li class="next">
                                    <a href="#">下一页»</a>
                                </li>
                            </ul>
                            <div><span>共{{totalPage}}页&nbsp;</span></div>
                        </div>
                    </div>
</template>
export default{
	name:'Pagination',
	//接收父组件Search传递过来的数据
	props:['pageNo','pageSize','total','continues'],
	computed:{
		totalPage(){
			return Math.ceil(this.total/this.pageSize);
		}
	}
}

!(重点)算出连续页面的起始数字和结束数字

  • 规律:当前页永远在连续数字的中间
    • 当前第八页–> 6 7 8 9 10
    • 当前第14页–> 12 13 14 15 16 (当前页pageNo)
  • 既然是一串数据,那么就放在一个数组当中?
computed:{
		totalPage(){
			return Math.ceil(this.total/this.pageSize);
		},
		startNumAndEndNum(){
			//将所用到的组件实例上的数据解构取出来(免得再一次次this.变量)
			const {continues,pageNo,totalPage} = this;
			//定义两个变量
			let start = 0, end = 0;
			//正常是continues<totalPage,那么就得单独做一次判断
			if(continues>totalPage){
				start = 1;
				end = totalPage;
			}else{
				//找规律:continues5页--减2,7页--减3……
				start = pageNo - parseInt(continues/2);
				end = pageNo + parseInt(continues/2);
				//start和end会出现溢出情况!
				//分别判断情况
				if(start<=0){
					start = 1;
					end = continues;
				}
				if(end>totalPage){
					end = totalPage;
					start = totalPage - continues + 1;
				}
			}
			return {start,end};
		},
	}
  • 动态中间部分遍历
<!--前面部分遍历-->
<li class="prev disabled">
 	<a href="#">«上一页</a>
</li>
<li class="active">
 	<a href="#" v-show="start != 1">1</a>
</li>
<li class="dotted" v-show="start != 1"><span>...</span></li>
 <!--中间部分遍历-->
<li v-for="(page, index) in startNumAndEndNum.end" :key="index"
                    v-show="page >= startNumAndEndNum.start">
	<a href="#">{{ page }}</a>
</li>
<!--后面部分遍历-->
<li class="dotted" v-show="startNumAndEndNum.end != totalPage" ><span>...</span></li>
<li class="active" v-show="startNumAndEndNum.end != totalPage">
	<a href="#">{{ totalPage }}</a>
</li>
<li class="next">
	<a href="#">下一页»</a>
</li>

在这里插入图片描述

1什么时候显示?如果start是1那么开头的1就不需要了v-show="start!=1"
1后面的省略号也同理,start != 1 则显示

  • 当pageNo为1时
    在这里插入图片描述
    后面的31和…也同样需要判断v-show="startNumAndEndNum.end != totalPage"
  • 当pageNo为30时
    在这里插入图片描述
分页器动态数据/交互

点击事件:

pageNo在1时无法点击上一页,pageNo为31时也同样无法点击下一页
li标签设置样式cursor:not-allowed(会显示一个禁止符合)
如果用的是button标签,可以用disabled属性 :disable="pageNo==1"

<li class="prev" :class="{disabled:pageNo==1}">
      <a href="#">«上一页</a>
</li>
<li class="prev" :class="{disabled:pageNo==totalPage}">
      <a href="#">«下一页</a>
</li>
  • 子组件点击事件,会改变pageNo,则需要传递给父组件
  1. 父组件Search给子组件Pagination传递数据,并在子组件上绑定自定义getPageNo
    <Pagination :pageNo=“searchParams.pageNo” :pageSize=“searchParams.pageSize” :total=“total” continues=“5” @getPageNo=“”>

  2. 在子组件中触发事件并传递参数给父组件,父组件拿到参数可修改数据

    • 子组件:
      • 在上一页按钮上绑定click事件触发@click="$emit('getPageNo',pageNo-1)"
      • 在分页的数字上绑定@click="$emit('getPageNo',1)"@click="$emit('getPageNo',totalPage)"
      • 在v-for循环的分页上@click="$emit('getPageNo',page)"传递page就行
      • 在下一页@click="$emit('getPageNo',pageNo+1)"
    • 父组件:
      -自定义回调函数,传递数据发送分页请求
 getPageNo(pageNo){
		 this.searchParamse.pageNo = pageNo;
		 //然后发送请求
		 }

最后样式部分:可以点击的地方加上类名:class="active:pageNo==1",:class="active:pageNo==page":class="active:pageNo==totalPage"

.class{
	background:skybule;
}

ok以上就完工啦!

Element UI组件

在这里插入图片描述

<el-pagination background layout="prev, pager, next" :total="91">
</el-pagination>

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

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

相关文章

第十二届蓝桥杯 2021 C/C++组 直线

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 两点确定一条直线&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 第一种方式代码详解&#xff1a; 第二种方式代码详解&#xff1a; 题目&#xff1a;…

《Piper》皮克斯技术解析:RIS系统与云渲染如何创造奥斯卡级动画短片

本文由专业专栏作家 Mike Seymour 撰写&#xff0c;内容包含非常有价值的行业资讯。 译者注 《Piper》是皮克斯动画工作室的一部技术突破性的短片&#xff0c;讲述了一只小鸟在海滩上寻找食物并面对自然挑战的故事。它不仅凭借其精美的视觉效果和细腻的情感表达赢得了2017年奥…

Java在excel中导出动态曲线图DEMO

1、环境 JDK8 POI 5.2.3 Springboot2.7 2、DEMO pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>commons…

Kotlin Multiplatform--02:项目结构进阶

Kotlin Multiplatform--02&#xff1a;项目结构进阶 引言正文 引言 在上一章中&#xff0c;我们对 Kotlin Multiplatform 项目有了基本的了解&#xff0c;已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…

代码随想录算法训练营第五十八天 | 1.拓扑排序精讲 2.dijkstra(朴素版)精讲 卡码网117.网站构建 卡码网47.参加科学大会

1.拓扑排序精讲 题目链接&#xff1a;117. 软件构建 文章讲解&#xff1a;代码随想录 思路&#xff1a; 把有向无环图进行线性排序的算法都可以叫做拓扑排序。 实现拓扑排序的算法有两种&#xff1a;卡恩算法&#xff08;BFS&#xff09;和DFS&#xff0c;以下BFS的实现思…

linux ptrace 图文详解(七) gdb、strace跟踪系统调用

目录 一、gdb/strace 跟踪程序系统调用 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; linux ptrace 图…

【前端】ES6 引入的异步编程解决方案Promise 详解

Promise 详解 1. 基本概念 定义&#xff1a;Promise 是 ES6 引入的异步编程解决方案&#xff0c;表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。核心作用&#xff1a;替代回调函数&#xff0c;解决“回调地狱”问题&#xff0c;提供更清晰的异步流程控…

const(C++)

打印出来的结果是 a是12 *p是200 const修饰指针 const修饰引用

python21-循环小作业

课程&#xff1a;B站大学 记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 循环语句小作业 for-in作业斐波那契 for 固定数值计算素数字符统计数字序列range 函数 水仙花…

小白电路设计-设计11-恒功率充电电路设计

介绍 作为电子信息工程的我&#xff0c;电路学习是一定要学习的&#xff0c;可惜目前作为EMC测试工程师&#xff0c;无法兼顾太多&#xff0c;索性不如直接将所学的知识进行运用&#xff0c;并且也可以作为契机&#xff0c;进行我本人的个人提升。祝大家与我一起进行提升。1.本…

Spring AI 快速入门:从环境搭建到核心组件集成

Spring AI 快速入门&#xff1a;从环境搭建到核心组件集成 一、前言&#xff1a;Java开发者的AI开发捷径 对于Java生态的开发者来说&#xff0c;将人工智能技术融入企业级应用往往面临技术栈割裂、依赖管理复杂、多模型适配困难等挑战。Spring AI的出现彻底改变了这一局面——…

http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire

文章目录 题目宽搜代码总结 题目 总时间限制: 5000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered from 1 to 8, from the top to the bottom and from left t…

架构师面试(三十六):广播消息

题目 在像 IM、短视频、游戏等实时在线类的业务系统中&#xff0c;一般会有【广播消息】业务&#xff0c;这类业务具有瞬时高流量的特点。 在对【广播消息】业务实现时通常需要同时写 “系统消息库” 和更新用户的 “联系人库” 的操作&#xff0c;用户的联系人表中会有未读数…

TortoiseGit使用图解

前言 记录GitTortoiseGit使用&#xff0c;记录下开发中常用命令&#xff0c;健忘时用到方知好。 TortoiseGit使用 图解 commit-提交代码 pull-拉取远程分支最新代码 push-将本地分支代码推送到远程分支 show log-查看分支提交记录 show log - 切换分支查看 show log - 远程分…

【时时三省】(C语言基础)循环程序举例

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题: 用公式4/π≈1-3/1+5/1-7/1+...求π的近似值,直到发现某一项的绝对值小于10的-6次方为止(该项不累加)。 解题思路: 这是求值的近似方法中的一种。求π值可以用不同的近似方法。如下面的表达式都可以…

珍爱网:从降本增效到绿色低碳,数字化新基建价值凸显

2024年12月24日&#xff0c;法大大联合企业绿色发展研究院发布《2024签约减碳与低碳办公白皮书》&#xff0c;深入剖析电子签在推动企业绿色低碳转型中的关键作用&#xff0c;为企业实现环境、社会和治理&#xff08;ESG&#xff09;目标提供新思路。近期&#xff0c;法大大将陆…

电子电子架构 --- 主机厂视角下ECU开发流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

PyQt6基础_QTableWidget

目录 描述&#xff1a; 代码 演示 描述&#xff1a; 1 单击选中一行 2 右键菜单 3 填充数据 4 提取行数据 5 删除行数据 代码 from PyQt6.QtCore import (Qt ) from PyQt6.QtGui import ( QAction ) from PyQt6.QtWidgets import (QApplication,QAbstractItemView,QL…

uniapp 上传二进制流图片

文章目录 场景&#x1f7e2;一、步骤1.1、选择图片1.2、 读取图片为二进制数据1.3、上传二进制数据到服务器 &#x1f7e2;二、项目案例2.1、替换头像案例2.1、uView u-upload 上传封面 &#x1f7e2; 三、关键注意事项3.1 二进制流与 FormData 区别3.2 性能优化3.3 跨平台适配…

赛灵思 XCKU115-2FLVB2104I Xilinx Kintex UltraScale FPGA

XCKU115-2FLVB2104I 是 AMD Xilinx Kintex UltraScale FPGA&#xff0c;基于 20 nm 先进工艺&#xff0c;提供高达 1 451 100 个逻辑单元&#xff08;Logic Cells&#xff09;&#xff0c;77 721 600 bit 的片上 RAM 资源&#xff0c;以及 5 520 个 DSP 切片&#xff08;DSP48E…