基于vue2的table分页组件实现方法
内容摘要
这篇文章主要为大家详细介绍了基于vue2的table分页组件实现方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
本文实例为大家分享了vue
对此感兴趣的朋友,看看idc笔记做的技术笔记!
本文实例为大家分享了vue
文章正文
这篇文章主要为大家详细介绍了基于vue2的table分页组件实现方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
本文实例为大家分享了vue2 table分页组件的具体代码,供大家参考,具体内容如下
pagination.js:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <code> ( 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 })() </code> |
pagination.css:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <code> 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; } </code> |
index.html:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <code> <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> </code> |
index.js
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <code> /** * 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) } } }); </code> |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持php教程。
注:关于基于vue2的table分页组件实现方法的内容就先介绍到这里,更多相关文章的可以留意
代码注释