最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:
该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己调整:
首先新建pagination.vue文件, 所有组件的代码都写在这里, 写这样的组件并没有什么太大的难度, 主要是解决父子组件之间值传递的问题
<template>
<nav>
<ul class="pagination">
<li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current - 1)"> « </a></li>
<li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(1)"> 首页 </a></li>
<li v-for="p in grouplist" :class="{'active': current == p.val}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow"
@click="setCurrent(p.val)"> {{ p.text }} </a>
</li>
<li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(page)"> 尾页 </a></li>
<li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current + 1)"> »</a></li>
</ul>
</nav>
</template>
<script type="es6">
export default{
data(){
return {
current: this.currentPage
}
},
props: {
total: {// 数据总条数
type: Number,
default: 0
},
display: {// 每页显示条数
type: Number,
default: 10
},
currentPage: {// 当前页码
type: Number,
default: 1
},
pagegroup: {// 分页条数
type: Number,
default: 5,
coerce: function (v) {
v = v > 0 ? v : 5;
return v % 2 === 1 ? v : v + 1;
}
}
},
computed: {
page: function () { // 总页数
return Math.ceil(this.total / this.display);
},
grouplist: function () { // 获取分页页码
var len = this.page, temp = [], list = [], count = Math.floor(this.pagegroup / 2), center = this.current;
if (len <= this.pagegroup) {
while (len--) {
temp.push({text: this.page - len, val: this.page - len});
}
;
return temp;
}
while (len--) {
temp.push(this.page - len);
}
;
var idx = temp.indexOf(center);
(idx < count) && ( center = center + count - idx);
(this.current > this.page - count) && ( center = this.page - count);
temp = temp.splice(center - count - 1, this.pagegroup);
do {
var t = temp.shift();
list.push({
text: t,
val: t
});
} while (temp.length);
if (this.page > this.pagegroup) {
(this.current > count + 1) && list.unshift({text: '...', val: list[0].val - 1});
(this.current < this.page - count) && list.push({text: '...', val: list[list.length - 1].val + 1});
}
return list;
}
},
methods: {
setCurrent: function (idx) {
if (this.current != idx && idx > 0 && idx < this.page + 1) {
this.current = idx;
this.$emit('pagechange', this.current);
}
}
}
}
</script>
<style lang="less">
.pagination {
overflow: hidden;
display: table;
margin: 0 auto;
/*width: 100%;*/
height: 50px;
li {
float: left;
height: 30px;
border-radius: 5px;
margin: 3px;
color: #666;
&
:hover {
background: #000;
a {
color: #fff;
}
}
a {
display: block;
width: 30px;
height: 30px;
text-align: center;
line-height: 30px;
font-size: 12px;
border-radius: 5px;
text-decoration: none
}
}
.active {
background: #000;
a {
color: #fff;
}
}
}
</style>
使用时, 在父组件中引入, 代码如下:
<template>
<v-pagination :total="total" :current-page='current' @pagechange="pagechange"></v-pagination>
</template>
<script type="es6">
import pagination from '@/components/common/pagination/pagination'
export default{
data(){
return {
total: 150, // 记录总条数
display: 10, // 每页显示条数
current: 1, // 当前的页数
},
methods: {
pagechange:function(currentPage){
console.log(currentPage);
// ajax请求, 向后台发送 currentPage, 来获取对应的数据
}
},
components: {
'v-pagination': pagination,
}
}
</script>
至此, 一个基于 vue2.0 的分页组件就完成了
# vue
# 2.0
# 分页组件
# 基于Vue.js的表格分页组件
# vue分页组件table-pagebar使用实例解析
# 基于Vue如何封装分页组件
# 使用vue.js制作分页组件
# 基于vue2的table分页组件实现方法
# 基于vue实现swipe分页组件实例
# vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
# VUE实现一个分页组件的示例
# vue 基于element-ui 分页组件封装的实例代码
# Vue开发之封装分页组件与使用示例
# 分页
# 条数
# 每页
# 有什么
# 在这里
# 太大
# 尾页
# 写了
# 没有找到
# 该项目
# 首页
# 都写
# 重构
# 主要是
# 请根据
# 完成了
# style
# page
# raquo
# type
相关文章:
北京专业网站制作设计师招聘,北京白云观官方网站?
如何快速使用云服务器搭建个人网站?
如何解决VPS建站LNMP环境配置常见问题?
建站之星如何修改网站生成路径?
建站主机CVM配置优化、SEO策略与性能提升指南
宝塔建站教程:一键部署配置流程与SEO优化实战指南
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
北京的网站制作公司有哪些,哪个视频网站最好?
如何通过商城自助建站源码实现零基础高效建站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何在阿里云部署织梦网站?
c# await 一个已经完成的Task会发生什么
建站之星后台密码遗忘或太弱?如何重置与强化?
如何批量查询域名的建站时间记录?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何选择网络建站服务器?高效建站必看指南
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何基于云服务器快速搭建网站及云盘系统?
建站主机选购指南:核心配置与性价比推荐解析
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
简单实现Android验证码
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
Java解压缩zip - 解压缩多个文件或文件夹实例
Swift中循环语句中的转移语句 break 和 continue
建站之星上传入口如何快速找到?
微信h5制作网站有哪些,免费微信H5页面制作工具?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何获取免费开源的自助建站系统源码?
,网站推广常用方法?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何构建满足综合性能需求的优质建站方案?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何通过WDCP绑定主域名及创建子域名站点?
,石家庄四十八中学官网?
如何在香港免费服务器上快速搭建网站?
建站DNS解析失败?如何正确配置域名服务器?
建站之星代理如何获取技术支持?
公司网站的制作公司,企业网站制作基本流程有哪些?
内部网站制作流程,如何建立公司内部网站?
建站之星后台管理:高效配置与模板优化提升用户体验
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
图册素材网站设计制作软件,图册的导出方式有几种?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
大同网页,大同瑞慈医院官网?
如何快速搭建高效WAP手机网站吸引移动用户?
制作网站的公司有哪些,做一个公司网站要多少钱?
*服务器网站为何频现安全漏洞?
建站之星如何快速更换网站模板?
*请认真填写需求信息,我们会在24小时内与您取得联系。