全网整合营销服务商

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

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

基于Vue如何封装分页组件

使用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>

最终效果

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

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

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


# vue如何封装组件  # vue  # 组件  # Vue分页组件的封装方法  # vue3封装自己的分页组件  # vue3.0手动封装分页组件的方法  # vue+iview分页组件的封装  # Vue开发之封装分页组件与使用示例  # vue 基于element-ui 分页组件封装的实例代码  # Vue分页组件实现过程详解  # 分页  # 下一页  # 上一页  # 小编  # 好了  # 在此  # 下载地址  # 给大家  # 点击此处  # 经常会  # 所述  # 绑定  # 翻页  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # float  # relative  # position 


相关文章: 建站之星代理费用多少?最新价格详情介绍  长沙企业网站制作哪家好,长沙水业集团官方网站?  家具网站制作软件,家具厂怎么跑业务?  Android自定义控件实现温度旋转按钮效果  ,网页ppt怎么弄成自己的ppt?  如何解决ASP生成WAP建站中文乱码问题?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  广东企业建站网站优化与SEO营销核心策略指南  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何注册花生壳免费域名并搭建个人网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  建站之星2.7模板快速切换与批量管理功能操作指南  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  高端建站如何打造兼具美学与转化的品牌官网?  如何在VPS电脑上快速搭建网站?  SQL查询语句优化的实用方法总结  如何配置支付宝与微信支付功能?  如何在景安云服务器上绑定域名并配置虚拟主机?  江苏网站制作公司有哪些,江苏书法考级官方网站?  Python多线程使用规范_线程安全解析【教程】  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  用v-html解决Vue.js渲染中html标签不被解析的问题  建站之星好吗?新手能否轻松上手建站?  浅谈Javascript中的Label语句  如何通过虚拟主机快速搭建个人网站?  制作网站的软件免费下载,免费制作app哪个平台好?  建站主机类型有哪些?如何正确选型  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  广东专业制作网站有哪些,广东省能源集团有限公司官网?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  香港服务器网站推广:SEO优化与外贸独立站搭建策略  在线制作视频网站免费,都有哪些好的动漫网站?  jQuery 常见小例汇总  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何通过可视化优化提升建站效果?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  零基础网站服务器架设实战:轻量应用与域名解析配置指南  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  浅析上传头像示例及其注意事项  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  ,sp开头的版面叫什么?  建站之星安装后界面空白如何解决?  如何快速完成中国万网建站详细流程?  如何高效完成自助建站业务培训? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。