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的一点点认识总结《javascript高级程序设计》读书笔记
Nov 30 Javascript
js 验证密码强弱的小例子
Mar 21 Javascript
js中call与apply的用法小结
Dec 28 Javascript
js中this的用法实例分析
Jan 10 Javascript
Jquery $when done then的用法详解
May 20 Javascript
常用的js验证和数据处理总结
Aug 02 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
Jun 21 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 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
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
Python 中@property的用法详解
2020/01/15 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
C#笔试题集合
2013/06/21 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
售后专员岗位职责
2013/12/08 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
成语的广告词
2014/03/19 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
工程售后服务方案
2014/06/08 职场文书
实习单位证明范例
2014/11/17 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers