Vue全局分页组件的实现代码


Posted in Javascript onAugust 10, 2018

需求

一个监控控制台界面,有成千上万条表格数据,需要做一个全局分页组件,支持调整每页显示数目、总页数、当前页数、前进后退、自由跳转页数。

字段

参数名 数据类型 说明
total Number 总条数
pageNo Number 总页数
limit Number 每页展示条数

原型

预期长酱紫(不要嫌丑!毕竟是后台控制台!)

Vue全局分页组件的实现代码

代码

html

<template>
  <div class="paging-content clearfix">
    <div class="fl">
      总共<b> {{total}} </b>条 
      <select v-model="limit">
        <option>10</option>
        <option>20</option>
        <option>30</option>
        <option>40</option>
        <option>50</option>
        <option>100</option>
      </select>条/页
    </div>
    <div class="fr paging-box">
      <a v-if="+no>1" class="fa fa-angle-double-left" @click="goToPage(1)"></a>
      <a v-if="+no<=1" class="fa fa-angle-double-left"></a>
      <a v-if="+no>1" class="fa fa-angle-left" @click="goToPage(+no - 1)"></a>
      <a v-if="+no<=1" class="fa fa-angle-left"></a>
      <a v-if="+no-2>1">...</a>
      <a v-if="+no-2>0" @click="goToPage(+no-2)">{{+no - 2}}</a>
      <a v-if="+no-1>0" @click="goToPage(+no-1)">{{+no - 1}}</a>
      <a v-if="+no>0" style="color: #000;background: #eee;">{{no}}</a>
      <a v-if="+no+1<=+sum" @click="goToPage(+no+1)">{{+no + 1}}</a>
      <a v-if="+no+2<=+sum" @click="goToPage(+no+2)">{{+no + 2}}</a>
      <a v-if="+no+2<=+sum-1">...</a>
      <a v-if="+no<+sum" class="fa fa-angle-right" @click="goToPage(+no + 1)"></a>
      <a v-if="+no>=+sum" class="fa fa-angle-right"></a>
      <a v-if="+no<+sum" class="fa fa-angle-double-right" @click="goToPage(+sum)"></a>
      <a v-if="+no>=+sum" class="fa fa-angle-double-right"></a>
    </div>
  </div>
</template>

js

<script>
  module.exports = {
    props: ['no', 'limit', 'total'],
    computed: {
      sum: function() {
        return Math.ceil(this.total/this.limit);
      }
    },
    methods: {
      'goToPage': function(page_no) {
        this.$dispatch('page-change', page_no);
      }
    },
    watch: {
      'limit': function(newVal, oldVal) {
        if(newVal!=oldVal&&oldVal!=undefined) {
          this.$dispatch('page-limit-change', newVal);
        }
      }
    }
  }
</script>

css

<style lang="less" rel="stylesheet/less">
  //定义了一个颜色参数文件,方便自定义颜色和管理,比如@color-white: #fff;
  @import "../less/variables"; 
  .paging-content {
    > div {
      font-size: 12px;
      color: @color-text-normal;
    }
    select {
      margin-right: 4px;
    }
    .fl {
      float: left;
    }
    .fr {
      float: right;
    }
    .paging-box {
      border-top: 1px solid #ccc;
      border-bottom: 1px solid #ccc;
      border-left: 1px solid #ccc;
      a {
        display: inline-block;
        width: 24px;
        height: 24px;
        border-right: 1px solid #ccc;
        line-height: 24px;
        text-align: center;
        float: left;
        color: @color-text-blue;
        cursor: pointer;
      }
    }
  }
</style>

局部组件使用方法

引入

import page from 'example-page'

注册组件

components:{
  page: page
},

模板

<paging :no.sync="params.page_no" :limit.sync="params.page_limit" :total.sync="total_items"></paging>

以上是制作步骤,制作好组件以后,参考Vue官网插件发布

npm 发包

  1. 确保你的项目的根目录的package.json文件已经建好
  2. 登录npm官网注册
  3. 在你的项目目录下登录npm login(之后按提示填写信息)
  4. 发包npm publish

如果执行npm publish出现错误,可能是你的包名已经被注册过,在npm 官网上搜索一下是否已被注册了。若发包成功,你就可以在npm官网上搜索到自己的包。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中SQL语句的应用实现
May 04 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
jquery实现简单手风琴菜单效果实例
Jun 13 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
May 15 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
Vue 实现手动刷新组件的方法
Feb 19 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 #Javascript
JavaScript闭包原理与用法实例分析
Aug 10 #Javascript
vue 动态绑定背景图片的方法
Aug 10 #Javascript
原生JS实现$.param() 函数的方法
Aug 10 #Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
Aug 10 #Javascript
JavaScript创建对象的常用方式总结
Aug 10 #Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 #Javascript
You might like
Syphon 使用方法
2021/03/03 冲泡冲煮
php生出随机字符串
2017/07/06 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python获得图片base64编码示例
2014/01/16 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
python之拟合的实现
2019/07/19 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
师德承诺书
2015/01/20 职场文书
北京英语导游词
2015/02/12 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python