html vue分页,使用Vue开发一个分页插件

本文详细介绍了如何在Vue应用中创建并全局注册分页组件,通过props接收total条数、每页显示数和当前页码,实现动态页码显示与事件触发。通过实例演示了组件的使用方法和样式设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组件是Vue最强大的功能之一,可以扩展HTML功能,封装可重用的代码。分页组件是网页中常用的,本篇文章介绍如何简单封装一个分页组件。

我们使用全局注册的方式来开发一个组件,形式如下:

Vue.component('组件名称',{

...配置项

});

思路

我们通过props传入参数,在page组件内部计算需要显示的页码。

//props 参数

total //数据总条数

pagesize //每页显示数

page //当前页码

总页数计算:Math.ceil(total/pagesize)

当页码改变时,触发一个pagechange事件,父组件中可以捕获该事件。

代码

Vue.component('page',{

props:{

total:{

type:[Number,String],

default:0

},

pagesize:{

type:[Number,String],

default:1

},

page:{

type:[Number,String],

default:1

}

},

template:'

'+

'

  • '+

'

上一页'+

'

首页'+

'

'+

'{{item}}'+

'

'+

'

尾页'+

'

下一页'+

'

总共{{totalCount}}页'+

'

'+

'

',

data(){

return {

totalCount:0 //总页数

}

},

computed:{

list(){

let list=[];

//计算总页数

this.totalCount=Math.ceil(this.total/this.pagesize);

//超限控制

if(this.page<=0){

this.page=1;

}

if(this.page>this.totalCount){

this.page=this.totalCount;

}

//计算显示页码

if(this.totalCount>5){

if(this.page>2&&this.page

list=[this.page-2,this.page-1,this.page,this.page+1,this.page+2];

}else if(this.page<=2&&this.page>0){

for(let i=1;i<=5;i++){

list.push(i);

}

}else if(this.page>=this.totalCount-2&&this.page<=this.totalCount){

for(let i=4;i>=0;i--){

list.push(this.totalCount-i);

}

}

}else{

for(let i = 1;i<=this.totalCount;i++){

list.push(i);

}

}

return list;

}

},

methods:{

//页码点击事件

handleClick(e){

let page=parseInt(e.target.innerText);

let {count,total }=this;

this.$emit('pagechange',{page,count,total});

},

//前一页

prev(e){

if(!e.target.classList.contains['disable']){

this.page>1&&this.page--;

let {page,count,total }=this;

this.$emit('pagechange',{page,count,total});

}

},

//下一页

next(e){

if(!e.target.classList.contains['disable']){

this.page

let {page,pagesize,total }=this;

this.$emit('pagechange',{page,pagesize,total});

}

},

//首页

toFirst(){

let {page,pagesize,total }=this;

this.$emit('pagechange',{page:1,pagesize,total});

},

//尾页

toEnd(){

let {page,pagesize,total }=this;

this.$emit('pagechange',{page:this.totalCount,pagesize,total});

}

}

});

样式

div.page{

font-size: 12px;

font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;

color: #666;

user-select: none;

}

div.page ul{

padding: 0;

margin:0;

}

div.page ul li{

display: inline-block;

min-width:30px;

min-height:30px;

border-radius:3px;

line-height: 30px;

text-align: center;

margin: 0 6px;

cursor: pointer;

}

div.page ul li.active{

background: #1796e0;

color:#fff;

}

div.page ul li.disable{

color: #ccc;

}

使用方式

//html代码

...

//js代码

new Vue({

el:'#app',

data:{

page:1,

pageSize:5,

total:100

},

methods:{

pageChange(e){

this.page=e.page;

}

}

});

...

最终效果:

AAffA0nNPuCLAAAAAElFTkSuQmCC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值