vue手把手教学封装分页器

news/2024/12/22 21:11:39/

1.vue中前台

<template><div><h6>"start":{{ pageStartEnd.start }},"当前页":{{ pagenow }}"end":{{ pageStartEnd.end }}</h6><!-- 如果点击上一页按钮,当前页减去1,并且如果当前页等于1后,禁止点击(下面我为disabled添加类名) --><button @click="pagenow--" :disabled="pagenow == 1">上一页</button><!-- 如果起始页大于1,展示,点击它,就会将当前页变成1,逻辑书写下面 --><button v-show="pageStartEnd.start > 1" @click="clickPage(1)">1</button><!-- 如果起始页大于2,才会展示... --><button v-show="pageStartEnd.start > 2">...</button><!-- 遍历end页,page>=start才会展示 --><button :class="{ active: pagenow == page }" v-for="(page, index) in pageStartEnd.end"v-show="page >= pageStartEnd.start" @click="clickPage(page)">{{ page }}</button><!-- 如果end小于最后一页减去1就展示 --><button v-show="pageStartEnd.end < totalpage - 1">....</button><!-- 如果end小于最后一页,才会展示,点击将会把当前页替换成最后一页 --><button v-show="pageStartEnd.end < totalpage" @click="clickPage(totalpage)">{{ totalpage }}</button><!-- 如果点击下一页,页码增加,当页码等于总页码数就禁用 --><button @click="pagenow++" :disabled="pagenow == totalpage">下一页</button><button>共{{ totalpage }}页</button></div>
</template>

2.vue中js页面

export default {name: 'study',data() {return {// 当前页数pagenow: 3,//  一页的数据pagesize: 3,//  总共数据totaldata: 78,// 连续的页数continues: 5,};},mounted() {},methods: {clickPage(page) {this.pagenow = page}},computed: {// 总共的页数totalpage() {return Math.ceil(this.totaldata / this.pagesize)},// 声明起始和结束的页码函数pageStartEnd() {let start, end = 0//  如果总页数小于连续页数if (this.totalpage < this.continues) {start = 1end = this.totalpage} else {// 下面总页数大于连续页数start = this.pagenow - parseInt(this.continues / 2)end = this.pagenow + parseInt(this.continues / 2)// 当起始页数小于1if (start < 1) {start = 1//  1 2 3 4 5 end = this.continues}// 当end页大于了总页数if (end > this.totalpage) {end = this.totalpage;start = this.totalpage - this.continues + 1}}return { start, end }}}
};

3.vue中less样式

div {text-align: center;button {width: 50px;height: 30px;&[disabled] {background: red;}}.active {background: green;}
}

4.源码展示

<template><div><h6>"start":{{ pageStartEnd.start }},"当前页":{{ pagenow }}"end":{{ pageStartEnd.end }}</h6><!-- 如果点击上一页按钮,当前页减去1,并且如果当前页等于1后,禁止点击(下面我为disabled添加类名) --><button @click="pagenow--" :disabled="pagenow == 1">上一页</button><!-- 如果起始页大于1,展示,点击它,就会将当前页变成1,逻辑书写下面 --><button v-show="pageStartEnd.start > 1" @click="clickPage(1)">1</button><!-- 如果起始页大于2,才会展示... --><button v-show="pageStartEnd.start > 2">...</button><!-- 遍历end页,page>=start才会展示 --><button :class="{ active: pagenow == page }" v-for="(page, index) in pageStartEnd.end"v-show="page >= pageStartEnd.start" @click="clickPage(page)">{{ page }}</button><!-- 如果end小于最后一页减去1就展示 --><button v-show="pageStartEnd.end < totalpage - 1">....</button><!-- 如果end小于最后一页,才会展示,点击将会把当前页替换成最后一页 --><button v-show="pageStartEnd.end < totalpage" @click="clickPage(totalpage)">{{ totalpage }}</button><!-- 如果点击下一页,页码增加,当页码等于总页码数就禁用 --><button @click="pagenow++" :disabled="pagenow == totalpage">下一页</button><button>共{{ totalpage }}页</button></div>
</template><script>
export default {name: 'study',data() {return {// 当前页数pagenow: 3,//  一页的数据pagesize: 3,//  总共数据totaldata: 78,// 连续的页数continues: 5,};},mounted() {},methods: {clickPage(page) {this.pagenow = page}},computed: {// 总共的页数totalpage() {return Math.ceil(this.totaldata / this.pagesize)},// 声明起始和结束的页码函数pageStartEnd() {let start, end = 0//  如果总页数小于连续页数if (this.totalpage < this.continues) {start = 1end = this.totalpage} else {// 下面总页数大于连续页数start = this.pagenow - parseInt(this.continues / 2)end = this.pagenow + parseInt(this.continues / 2)// 当起始页数小于1if (start < 1) {start = 1//  1 2 3 4 5 end = this.continues}// 当end页大于了总页数if (end > this.totalpage) {end = this.totalpage;start = this.totalpage - this.continues + 1}}return { start, end }}}
};
</script><style lang="less" scoped>
div {text-align: center;button {width: 50px;height: 30px;&[disabled] {background: red;}}.active {background: green;}
}
</style>

 5.效果展示

 

 

 

 


http://www.ppmy.cn/news/1015441.html

相关文章

对 async/await 的理解

async/await 的理解 async/await 其实是 Generator 的语法糖&#xff0c;它能实现的效果都能用then 链来实现&#xff0c;它是为优化 then 链而开发出来的。从字面上来看&#xff0c;async 是“异步”的简写&#xff0c;await 则为等待&#xff0c;所以很好理解async用于申明一…

固态硬盘 vs 机械硬盘:选择合适的存储方案

随着计算机的快速发展&#xff0c;各种硬件组件如CPU、显卡以及制作工艺都取得了长足的进步&#xff0c;但是磁盘的发展相对较为缓慢&#xff0c;这也导致了磁盘性能在一定程度上限制了计算机的整体性能。为了解决这个问题&#xff0c;固态硬盘应运而生。 那么&#xff0c;我们…

eclipse Java Code_Style Code_Templates

Preferences - Java - Code Style - Code Templates Eclipse [Java_Code_Style_Code_Templates_ZengWenFeng] 2023.08.07.xml 创建一个新的工程&#xff0c;不然有时候不生效&#xff0c;旧项目可能要重新导入eclipse 创建一个测试类试一试 所有的设置都生效了

概念解析 | 合成孔径雷达中运动补偿与自聚焦的关系

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:合成孔径雷达中运动补偿和自聚焦的联系与差别 概念解析 | 合成孔径雷达运动补偿与自聚焦的关系研究 基于二维空变运动补偿的机动平台大斜视SAR稀疏自聚焦方法 一、背景介绍 合成…

【Spring Boot】Spring Boot项目的创建和文件配置

目录 一、为什么要学Spring Boot 1、Spring Boot的优点 二、创建Spring Boot项目 1、创建项目之前的准备工作 2、创建Spring Boot项目 3、项目目录的介绍 4、安装Spring Boot快速添加依赖的插件 5、在项目中写一个helloworld 三、Spring Boot的配置文件 1、配置文件的…

Redis键值设计

1.1、优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如&#xff1a;我们的登录业务&#xff0c;保存用户信息&#xff0c;其key可以…

SIP协议之音/视频转换

在SIP通话应用场景中&#xff0c;有时需要在音频和视频通话中进行切换&#xff0c;这个功能实现的需要发送re-INVITE重新协商媒体&#xff0c;即重新协商媒体&#xff08;SDP)中是否允许视频。 一、实现原理 1.1 音频转视频 音频通话过程中&#xff0c;发起方重新发送INVITE消…

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例,作为操作截图: 镜像构建目录说明 pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保…