基于vue2的table分页组件实现方法
发布时间 - 2026-01-11 00:15:44 点击率:次本文实例为大家分享了vue2 table分页组件的具体代码,供大家参考,具体内容如下

pagination.js:
(function(){
var template = '<div class="page-bar" > \
<div class="info">{{info}}</div>\
<div class="showpages">每页<select class="showpages-select" v-on:change="pageschange" v-model="selected" ><option v-for="item in showpages">{{item}}</option></select>条</div>\
<div class="pagesbtn"><ul v-on:click="setpage"> \
<li ><a v-bind:class="setButtonClass(0)" v-on:click="firstPage()">首页</a></li> \
<li><a v-bind:class="setButtonClass(0)" v-on:click="prvePage()">上一页</a></li> \
<li v-for="index in indexs" v-bind:class="{ active: cur == index }"> \
<a v-on:click="btnclick(index)" >{{ index < 1 ? "..." : index }}</a> \
</li> \
<li ><a v-bind:class="setButtonClass(1)" v-on:click="nextPage()">下一页</a></li> \
<li ><a v-bind:class="setButtonClass(1)" v-on:click="lastPage()">尾页</a></li> \
</ul></div> \
</div>\
'
var pagination = Vue.extend({
template: template,
props: ["cur", "all", "selected", "showpages", "info"],
computed: {
indexs: function () {
var left = 1
var right = this.all
var ar = []
if (this.all >= 11) {
if (this.cur > 5 && this.cur < this.all - 4) {
left = this.cur - 5
right = this.cur + 4
} else {
if (this.cur <= 5) {
left = 1
right = 10
} else {
right = this.all
left = this.all - 9
}
}
}
while (left <= right) {
ar.push(left)
left++
}
if (ar[0] > 1) {
ar[0] = 1;
ar[1] = -1;
}
if (ar[ar.length - 1] < this.all) {
ar[ar.length - 1] = this.all;
ar[ar.length - 2] = 0;
}
return ar
}
},
methods: {
btnclick: function (page) {
this.cur = page;
},
nextPage: function () {
if (this.cur >= this.all) {
this.cur=this.all;
}else{
this.cur++;
}
},
prvePage: function () {
if (this.cur <= 1) {
this.cur=1;
}else{
this.cur--;
}
},
firstPage: function () {
this.cur=1;
},
lastPage: function () {
this.cur=this.all;
},
setButtonClass: function (isNextButton) {
if (isNextButton) {
return this.cur >= this.all ? "page-button-disabled" : ""
}
else {
return this.cur <= 1 ? "page-button-disabled" : ""
}
},
setpage:function () {
this.$emit('mypage', this.cur);
},
pageschange:function () {
this.$emit('pageschange', this.selected);
}
}
})
window.Pagination = pagination
})()
pagination.css:
ul, li {
margin: 0;
padding: 0;
}
.page-bar {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
float: right;
border-radius: 4px;
}
.page-bar .info{
float: left;
margin-left:16px;
font-size: 16px;
height: 100%;
}
.page-bar .showpages{
float: left;
font-size: 16px;
margin-left: 16px;
height: 100%;
}
.page-bar .showpages .showpages-select{
width: 70px;
margin: 0 10px;
height: 28px
}
.page-bar .pagesbtn{
float: left;
margin-left:16px;
width: 650px;
height: 100%;
}
.page-bar .pagesbtn ul{
text-align: center;
width: 100%;
}
.page-button-disabled {
color:#ddd !important;
}
.page-bar li {
list-style: none;
display: inline-block;
}
.page-bar li:first-child > a {
margin-left: 0;
}
.page-bar a {
border: 1px solid #ddd;
text-decoration: none;
position: relative;
float: left;
padding: 6px 12px;
line-height: 1.42857143;
color: #337ab7;
cursor: pointer;
}
.page-bar a:hover {
background-color: #eee;
}
.page-bar .active a {
color: #fff;
cursor: default;
background-color: #1e7aca;
border-color: #1e7aca;
}
.page-bar i {
font-style: normal;
color: #1e7aca;
margin: 0 4px;
font-size: 12px;
}
index.html:
<table class="table table-bordered table-hover "id="ggztable" v-show="isAddSpecifications">
<thead>
<tr>
<th>规格值</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,nn) in limitTemps">
<td>{{item.value}}</td>
<td>
<img src='../img/common_edit@25.png' data-toggle="modal"
data-target="#editSonModal" @click="editSonModal(item,nn)" alt='修改'>
<img src='../img/common_del@25.png' data-toggle="modal"
data-target="#delSonModal" @click="delSonModal(nn)" alt='删除'>
</td>
</tr>
</tbody>
</table>
<vue-pagination :cur="specificationValCur":all="specificationValAll":info="specificationValInfo" :showpages="specificationValShowpages":selected="specificationValselected"
v-on:mypage="getPage" v-on:pageschange="getspecificationValShowPages">
</vue-pagination>
index.js
/**
* Created by komi on 2017-03-05 0005.
*/
var vm = new Vue({
el: ".main",
data: {
specificationValCur: 1,//当前页
specificationValAll: 1,//总页数
specificationValselected: 10,//默认每页显示的页数
specificationValTotalRecond: 1,//总记录数
specificationValShowpages: [10, 30, 50, 100], //每页显示的页数
specificationValInfo: "",
limitTemps: [],
temps:[]//数据源
},
watch: {
temps: "setPage"
},
components: {
'vue-pagination': Pagination
},
methods: {
setPage: function () {
this.specificationValInfo = "记录数为:" + this.temps.length + "条";
this.specificationValTotalRecond = this.temps.length;
this.setPageBtn();
this.setPageLimit(this.specificationValTotalRecond,this.specificationValselected,1)
},
getPage:function (msg) {
this.specificationValCur=msg;//这里必须,否则按钮无法高亮
this.setPageLimit(this.specificationValTotalRecond,this.specificationValselected,msg)
},
setPageLimit: function (total,select,cur) {//这里为实现分页切换table的主要实现
if(total<=select){
this.limitTemps=this.temps;
return
}else {
var arr = [];
var a=select*(cur-1);
var b=select*cur;
for (var i = a; i < b; i++) {
if(typeof(this.temps[i])!="undefined"){
arr[i - a] = this.temps[i]
}
}
this.limitTemps = arr;
}
console.log("total:"+total+"select"+select+"cur"+cur)
},
setPageBtn: function () {
if (this.specificationValTotalRecond > this.specificationValselected) {
if (this.specificationValTotalRecond % this.specificationValselected == 0) {
this.specificationValAll = this.specificationValTotalRecond / this.specificationValselected
} else {
this.specificationValAll = parseInt(this.specificationValTotalRecond / this.specificationValselected) + 1
}
} else {
this.specificationValAll = 1
}
},
getspecificationValShowPages: function (pages) {
this.specificationValselected = pages;
this.setPageBtn();
this.setPageLimit(this.specificationValTotalRecond,this.specificationValselected,1)
}
}
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue2
# table
# 分页组件
# 基于Vue.js的表格分页组件
# vue实现分页组件
# 基于Vue如何封装分页组件
# vue分页组件table-pagebar使用实例解析
# Vue.js实现一个自定义分页组件vue-paginaiton
# Vue中ElementUI分页组件Pagination的使用方法
# 使用vue.js制作分页组件
# vue 基于element-ui 分页组件封装的实例代码
# Vue全局分页组件的实现代码
# Vue分页组件的封装方法
# 每页
# 分页
# 下一页
# 上一页
# 尾页
# 大家分享
# 首页
# 具体内容
# 大家多多
# 数为
# 当前页
# push
# ar
# amp
# length
# button
# disabled
# isNextButton
# return
# methods
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在Windows服务器上快速搭建网站?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Java类加载基本过程详细介绍
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
高端企业智能建站程序:SEO优化与响应式模板定制开发
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何在景安服务器上快速搭建个人网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
深圳网站制作平台,深圳市做网站好的公司有哪些?
微信公众帐号开发教程之图文消息全攻略
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在建站主机中优化服务器配置?
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
微信小程序 五星评分(包括半颗星评分)实例代码
再谈Python中的字符串与字符编码(推荐)
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何快速登录WAP自助建站平台?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel如何自定义错误页面(404, 500)?(代码示例)
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
北京网站制作公司哪家好一点,北京租房网站有哪些?
node.js报错:Cannot find module 'ejs'的解决办法
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何用低价快速搭建高质量网站?
如何快速配置高效服务器建站软件?
Android Socket接口实现即时通讯实例代码
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
C++时间戳转换成日期时间的步骤和示例代码
如何正确下载安装西数主机建站助手?
如何快速查询网站的真实建站时间?
如何在云主机上快速搭建网站?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法

