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 相关文章推荐
jquery 模式对话框终极版实现代码
Sep 28 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 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上传文件并存储到mysql数据库的方法
2015/03/16 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
python去除所有html标签的方法
2015/05/05 Python
python 计算文件的md5值实例
2017/01/13 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Python制作刷网页流量工具
2017/04/23 Python
python中subprocess批量执行linux命令
2018/04/27 Python
Python检查ping终端的方法
2019/01/26 Python
浅析Python3 pip换源问题
2020/01/06 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
六查六看自查材料
2014/02/17 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
环保倡议书格式范文
2014/05/14 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
vue项目支付功能代码详解
2022/02/18 Vue.js
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技