基于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 相关文章推荐
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
Apr 27 Javascript
imgAreaSelect 中文文档帮助说明
Oct 08 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 Javascript
jquery获取css的color值返回RGB的方法
Dec 18 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 Javascript
AngularJS下$http服务Post方法传递json参数的实例
Mar 29 Javascript
一步一步实现Vue的响应式(对象观测)
Sep 02 Javascript
BootStrap前端框架使用方法详解
Feb 26 Javascript
使用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中的命名空间相关概念浅析
2015/01/22 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
js中this的用法实例分析
2015/01/10 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
React中的render何时执行过程
2018/04/13 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
vue实现行列转换的一种方法
2019/08/06 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python scipy卷积运算的实现方法
2019/09/16 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
异常和异常类的概念
2014/09/12 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
资深地理教师自我评价
2013/09/21 职场文书
应届毕业生个人自荐信范文
2013/11/30 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
医院搬迁方案
2014/06/14 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis