vue2.0实现分页组件的实例代码


Posted in Javascript onJune 22, 2017

最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:

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 的分页组件就完成了

Javascript 相关文章推荐
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
将json当数据库一样操作的javascript lib
Oct 28 Javascript
jQuery替换字符串(实例代码)
Nov 13 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
15分钟深入了解JS继承分类、原理与用法
Jan 19 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
vue弹出框组件封装实例代码
Oct 31 Javascript
纯JS实现只能输入数字的简单代码
Jun 21 #Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 #Javascript
Vue实现百度下拉提示搜索功能
Jun 21 #Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 #Javascript
jQuery实现可拖动进度条实例代码
Jun 21 #jQuery
详解Vue整合axios的实例代码
Jun 21 #Javascript
详解在vue-cli项目中安装node-sass
Jun 21 #Javascript
You might like
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
php命令行用法入门实例教程
2014/10/27 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
JS Loading功能的简单实现
2013/11/29 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
js中this的用法实例分析
2015/01/10 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
python实现的重启关机程序实例
2014/08/21 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python属于软件吗
2020/06/18 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
生产厂长岗位职责
2014/02/21 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
普宁寺导游词
2015/02/04 职场文书
单位介绍信格式范文
2015/05/04 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python