vue分页组件编写

时间:2022-05-12 09:33:09

点击查看vue分页组件源码:https://github.com/317482454/vue_pageination

npm:

npm i vue_pageination --save

vue中使用:

import pageination from 'vue_pageination';
Vue.use(pageination);
<pageination :total="50" :size="size" :page="10" :changge="pageFn" :isUrl="true"></pageination>
效果图:


vue分页组件编写

1.props对象:(不解释是做啥的,不懂的点击:https://cn.vuejs.org/v2/api/#props

props: ['total', 'size', 'page', 'changge', 'isUrl']
2.data对象:

 data(){
return {
pageinationTotal: this.total,//总条目数
pageinationSize: this.size ? this.size : 10,//每页显示条目个数
pageinationLength: [],
pageinationCurrentPage: this.page ? this.page : 1,//当前页数默认1
pageinationPage: 0,//可分页数
startDisabled: true,//是否可以点击首页上一页
endDisabled: true,//是否可以点击尾页下一页
pageChangge: this.changge,//修改方法
pageIsUrl: this.isUrl ? true : false,//是否开启修改url
}
},

3.计算可分页数:

 this.pageinationPage = Math.ceil(this.pageinationTotal / this.pageinationSize);//取整有小数往上+1
4.页码计算:

        //是否可以点击上一页首页
this.startDisabled = this.pageinationCurrentPage != 1 ? false : true;
//是否可以点击下一页尾页
this.endDisabled = this.pageinationCurrentPage != this.pageinationPage ? false : true;
//重置
this.pageinationLength = [];
//开始页码1
let start = this.pageinationCurrentPage - 4 > 1 ? this.pageinationCurrentPage - 4 : 1;
//当前页码减去开始页码得到差
let interval = this.pageinationCurrentPage - start;
//最多9个页码,总页码减去interval 得到end要显示的数量+
let end = (9 - interval) < this.pageinationPage ? (9 - interval) : this.pageinationPage;
//最末页码减开始页码小于8
if ((end - start) != 8) {
//最末页码加上与不足9页的数量,数量不得大于总页数
end = end + (8 - (end - start)) < this.pageinationPage ? end + (8 - (end - start)) : this.pageinationPage;
//最末页码加上但是还不够9页,进行开始页码追加,开始页码不得小于1
if ((end - start) != 8) {
start = (end - 8) > 1 ? (end - 8) : 1;
}
}
for (let i = start; i <= end; i++) {
this.pageinationLength.push(i);
}


5.html代码:

    <div @click="pageUp(0)" class="pagination_page" :class="startDisabled?'disabled':''">首页</div>
<div @click="pageUp(1)" class="pagination_page" :class="startDisabled?'disabled':''">上一页</div>
<div class="pagination_page" :class="item==pageinationCurrentPage?'pagination_page_active':''"
v-for="item in pageinationLength" @click="jump(item)">
{{item}}
</div>
<div @click="pageDown(1)" class="pagination_page" :class="endDisabled?'disabled':''">下一页</div>
<div @click="pageDown(0)" class="pagination_page pagination_page_right" :class="endDisabled?'disabled':''">尾页</div>

6.关于返回当前页码

   pageCurrentChange(){
this.pageChangge(this.pageinationCurrentPage);
}

使用:

changge:页码切换方法触发,比如:传入pageFn方法接收page页码

pageFn(val){ this.page = val; }
vue分页组件编写