全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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


# 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小时内与您取得联系。