基于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 相关文章推荐
JavaScript为对象原型prototype添加属性的两种方式
Aug 01 Javascript
javascript跨域刷新实现代码
Jan 01 Javascript
Jquery插件 easyUI属性汇总
Jan 19 Javascript
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
javascript实现可拖动变色并关闭层窗口实例
May 15 Javascript
详谈表单重复提交的三种情况及解决方法
Aug 16 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 26 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
如何构建一个Vue插件并生成npm包
Oct 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的memcache类分享(memcache队列)
2014/03/26 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
Javascript浅谈之this
2013/12/17 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
详解JavaScript树结构
2017/01/09 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
一道python走迷宫算法题
2018/01/22 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
python2 对excel表格操作完整示例
2020/02/23 Python
使用Python pip怎么升级pip
2020/08/11 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
仓库门卫岗位职责
2013/12/22 职场文书
寒假实习自荐信
2014/01/26 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
个人先进事迹材料
2014/12/29 职场文书
红色电影观后感
2015/06/18 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
详解Python flask的前后端交互
2022/03/31 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python