Vue分页组件封装的实现是怎样的,代码是什么
Admin 2022-08-13 群英技术资讯 478 次浏览
这个是基于vue2的分页封装,仿照elementUI而写的组件。
效果如图
话不多说,直接上代码
<template> <div class="pagination"> <!-- 总页数 --> <div class="total">共{{ total }}条</div> <!-- 选择每页的条数 --> <select name="" id="size_select" v-model="sizes" @change="sizeChange"> <option v-for="item in pageSizes" :key="item" :value="item"> {{ item }}条/页 </option> </select> <div class="pagenum"> <!-- 上一页 --> <el-button icon="el-icon-arrow-left" :disabled="backDisabled" circle @click="back" ></el-button> <!-- 页码 --> <ul> <li :class="currentPage == item ? 'active' : ''" v-for="(item, index) in pagenum" :key="index" @click="toPage(item)" > {{ item }} </li> </ul> <!-- 下一页 --> <el-button icon="el-icon-arrow-right" :disabled="forwardDisabled" circle @click="forward" ></el-button> </div> </div> </template> <script> export default { name: "pagination", props: { total: { // 总数 type: null, required: true, }, pageSizes: { // 可选择的每页条数 type: Array, }, pageSize: { // 每页显示的条数 type: Number, required: true, }, currentPage: { // 当前页 type: Number, required: true, }, }, data() { return { sizes: this.pageSize, // 接收props传来的pageSize nowPage: this.currentPage, // 接收props传来的currentPage }; }, computed: { allPage() { // 计算所有的页数 return Math.ceil(this.total / this.pageSize); }, backDisabled() { // 是否禁用上一页 return this.currentPage == 1; }, forwardDisabled() { // 是否禁用下一页 return this.currentPage == this.allPage; }, pagenum() { // 计算显示不同的页 if (this.allPage - this.nowPage > 6) { // if (this.nowPage > 6) { return [ 1, "...", this.nowPage - 2, this.nowPage - 1, this.nowPage, this.nowPage + 1, this.nowPage + 2, "...", this.allPage, ]; } else { if (this.allPage > 8) { return [1, 2, 3, 4, 5, 6, "...", this.allPage]; } else { return this.allPage; } } } else { if (this.nowPage < 6) { return this.allPage; } else { return [ 1, "...", this.allPage - 5, this.allPage - 4, this.allPage - 3, this.allPage - 2, this.allPage - 1, this.allPage, ]; } } }, }, methods: { sizeChange() { // 每页限制条数改变触发事件 this.$emit("sizeChange", this.sizes); }, forward() { // 点击下一页 this.$emit("currentChange", (this.nowPage += 1)); }, back() { // 点击上一页 this.$emit("currentChange", (this.nowPage -= 1)); }, toPage(val) { // 点击页数 if (val == "...") { console.log(2); } else { this.nowPage = val; this.$emit("currentChange", val); } }, }, }; </script>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了ES6 Object.assign()的用法及用途,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要为大家详细介绍了使用js中的Canvas实现橡皮擦效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要给大家介绍的是vue-cli 介绍与安装,vue-cli是和vue进行深度组合的工具,可以快速帮我们创建vue项目,并且把一些脚手架相关的代码给我们创建好。真正使用vue开发项目,都是用vue-cli来创建项目的,下面文章详细内容,需要的朋友可以参考一下
当我点击饼图时,出现相应的内容,并重新渲染饼图展示内容 饼图点击事件this.conechart.on(click, (params) = { params.name});获取的是点击的对应的板块名 利用获取的板块名,去接口调取对应的数据 , 调取数据是异步调用 ,所以重新渲染视图要在 异步中渲染,否则同步渲染不
这篇文章主要为大家介绍了项目中使用Typescript封装axios的示例过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008