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 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
JQuery 学习笔记 选择器之五
Jul 23 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
javascript 表单验证常见正则
Sep 28 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
javascript每日必学之封装
Feb 23 Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
vue-cli3 热更新配置操作
Sep 18 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php实现的在线人员函数库
2008/04/09 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
浅谈js闭包理解
2019/03/28 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python实现汉诺塔算法
2021/03/01 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
当当网软件测试笔试题
2015/11/24 面试题
英语专业毕业生自荐信范文
2013/12/31 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
出国留学计划书
2014/04/27 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers