基于Vue如何封装分页组件


Posted in Javascript onDecember 16, 2016

使用Vue做双向绑定的时候,可能经常会用到分页功能

接下来我们来封装一个分页组件

先定义样式文件 pagination.css

ul, li {
  margin: 0px;
  padding: 0px;
}
.page-bar {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.page-button-disabled {
  color:#ddd !important;
}
.page-bar li {
  list-style: none;
  display: inline-block;
}
.page-bar li:first-child > a {
  margin-left: 0px;
}
.page-bar a {
  border: 1px solid #ddd;
  text-decoration: none;
  position: relative;
  float: left;
  padding: 6px 12px;
  margin-left: -1px;
  line-height: 1.42857143;
  color: #337ab7;
  cursor: pointer;
}
.page-bar a:hover {
  background-color: #eee;
}
.page-bar .active a {
  color: #fff;
  cursor: default;
  background-color: #337ab7;
  border-color: #337ab7;
}
.page-bar i {
  font-style: normal;
  color: #d44950;
  margin: 0px 4px;
  font-size: 12px;
}

js文件 pagination.js

(function (vue) {
  // html模板信息
  var template = '<div class="page-bar"> \
           <ul> \
            <li><a class="{{ setButtonClass(0) }}" v-on:click="prvePage(cur)">上一页</a></li> \
            <li v-for="index in indexs" v-bind:class="{ active: cur == index }"> \
             <a v-on:click="btnClick(index)">{{ index < 1 ? "..." : index }}</a> \
            </li> \
            <li><a class="{{ setButtonClass(1) }}" v-on:click="nextPage(cur)">下一页</a></li> \
           </ul> \
          </div>'
  var pagination = vue.extend({
    template: template,
    props: ['cur', 'all'],
    computed: {
      indexs: function () {
        var left = 1
        var right = this.all
        var ar = []
        if (this.all >= 11) {
          if (this.cur > 5 && this.cur < this.all - 4) {
            left = this.cur - 5
            right = this.cur + 4
          } else {
            if (this.cur <= 5) {
              left = 1
              right = 10
            } else {
              right = this.all
              left = this.all - 9
            }
          }
        }
        while (left <= right) {
          ar.push(left)
          left++
        }
        if (ar[0] > 1) {
          ar[0] = 1;
          ar[1] = -1;
        }
        if (ar[ar.length - 1] < this.all) {
          ar[ar.length - 1] = this.all;
          ar[ar.length - 2] = 0;
        }
        return ar
      }
    },
    methods: {
      // 页码点击事件
      btnClick: function (data) {
        if (data < 1) return;
        if (data != this.cur) {
          this.cur = data
          this.$dispatch('btn-click', data)
        }
      },
      // 下一页
      nextPage: function (data) {
        if (this.cur >= this.all) return;
        this.btnClick(this.cur + 1);
      },
      // 上一页
      prvePage: function (data) {
        if (this.cur <= 1) return;
        this.btnClick(this.cur - 1);
      },
      // 设置按钮禁用样式
      setButtonClass: function (isNextButton) {
        if (isNextButton) {
          return this.cur >= this.all ? "page-button-disabled" : ""
        }
        else {
          return this.cur <= 1 ? "page-button-disabled" : ""
        }
      }
    }
  })
  vue.Pagination = pagination
})(Vue)

pagination分页组件就封装好了,需要使用的时候,引入以上两个文件即可

接下来我们测试下效果

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <title></title>
  <script src="vue.js"></script>
  <link href="pagination.css" rel="stylesheet" />
  <script src="pagination.js"></script>
</head>
<body>
  <div id="app">
    <vue-pagination :cur.sync="cur" :all.sync="all" v-on:btn-click="listen"></vue-pagination>
    <p>{{msg}}</p>
  </div>
  <script type="text/javascript">
    var app = new Vue({
      el: '#app',
      data: {
        // 当前页码
        cur: 1,
        // 总页数
        all: 100,
        msg: ''
      },
      components: {
        // 引用组件
        'vue-pagination': Vue.Pagination
      },
      methods: {
        listen: function (data) {
          // 翻页会触发此事件
          this.msg = '当前页码:' + data
        }
      }
    })
  </script>
</body>
</html>

最终效果

基于Vue如何封装分页组件

页码切换事件在listen中处理即可

点击此处下载源码:源码下载地址

以上所述是小编给大家介绍的基于Vue如何封装分页组件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
EasySlider 基于jQuery功能强大简单易用的滑动门插件
Jun 11 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 Javascript
JavaScript返回上一页的三种方法及区别介绍
Jul 04 Javascript
javascript的BOM汇总
Jul 16 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
Mongoose中document与object的区别示例详解
Sep 18 Javascript
web前端vue之CSS过渡效果示例
Jan 10 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
使用ionic切换页面卡顿的解决方法
Dec 16 #Javascript
详解如何较好的使用js
Dec 16 #Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 #Javascript
详解js的事件处理函数和动态创建html标记方法
Dec 16 #Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 #Javascript
JS限制条件补全问题实例分析
Dec 16 #Javascript
Node.js用readline模块实现输入输出
Dec 16 #Javascript
You might like
PHP的面试题集
2006/11/19 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
出纳岗位职责范本
2013/12/01 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
公司端午节活动方案
2014/02/04 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
个人职业及收入证明
2014/10/13 职场文书
2014年创卫工作总结
2014/11/24 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
长城导游词400字
2015/01/30 职场文书
花田少年史观后感
2015/06/16 职场文书
谢师宴学生致辞
2015/07/27 职场文书
教师旷工检讨书
2015/08/15 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
关于的python五子棋的算法
2022/05/02 Python