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 相关文章推荐
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
详细谈谈javascript的对象
Jul 31 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
node实现的爬虫功能示例
May 04 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 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
新浪新闻小偷
2006/10/09 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python 格式化输出百分号的方法
2019/01/20 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
python Pillow图像处理方法汇总
2019/10/16 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
英国网上花店:Bunches
2016/11/29 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
数控专业毕业生自荐信范文
2014/03/04 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
Python实现仓库管理系统
2022/05/30 Python