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 常见对象类创建代码与优缺点分析
Dec 07 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
vue中的event bus非父子组件通信解析
Oct 27 Javascript
JS运动改变单物体透明度的方法分析
Jan 23 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
Feb 13 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
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python基础教程之常用运算符
2014/08/29 Python
初步解析Python中的yield函数的用法
2015/04/03 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
Python玩转Excel的读写改实例
2019/02/22 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
下载官网python并安装的步骤详解
2019/10/12 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
集体备课反思
2014/02/12 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
个人欠条范本
2015/07/03 职场文书
禁毒主题班会教案
2015/08/14 职场文书