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中关于执行环境的杂谈
Aug 14 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
jquery获取table中的某行全部td的内容方法
Mar 08 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
javascript面向对象程序设计(一)
Jan 29 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
javascript求日期差的方法
Mar 02 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
js上下视差滚动简单实现代码
Mar 07 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
Jul 12 Javascript
JS快速实现简单计算器
Apr 08 Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
js 小贴士一星期合集
2010/04/07 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
javascript轮播图算法
2016/10/21 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
Python脚本实时处理log文件的方法
2016/11/21 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
python缩进长度是否统一
2020/08/02 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
学习计划书怎么写
2014/09/15 职场文书
放假通知
2015/04/14 职场文书
校园广播稿范文
2015/08/19 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
python实现层次聚类的方法
2021/11/01 Python
HDFS免重启挂载新磁盘
2022/04/06 Servers
JS class语法糖的深入剖析
2022/07/07 Javascript