vue分页组件封装

1.样式:

2.组件

<template>
    <div class="pagination text-right">
        <span class="prev mr10 ml10" @click="action(‘prev‘)" v-if="paginationOpt.pageIndex != ‘1‘"><i class="triangle-left"></i></span>
        <span class="prev disabled mr10 ml10" v-if="paginationOpt.pageIndex == ‘1‘"><i class="triangle-left"></i></span>
        <span class="mr5">{{paginationOpt.pageIndex}}</span>/<span class="ml5">{{paginationOpt.pageCount}}</span>
        <span class="next mr10 ml10" @click="action(‘next‘)" v-if="paginationOpt.pageIndex < paginationOpt.pageCount"><i class="triangle-right"></i></span>
        <span class="next disabled mr10 ml10" v-if="paginationOpt.pageIndex >= paginationOpt.pageCount"><i class="triangle-right"></i></span>
        <span style="float:right;padding-top:2px;">
        <input type="text" v-model="whichPage"><span class="go" @click="action(‘gotowhich‘)">GO</span></span>
    </div>

</template>
<script>
/**  父组件调用该组件方法如下
 * 引入方法   例: <pagination v-if="list.length>0" class="pull-right" :paginationOpt="employeePagination" @switchPage="employeePagesFn" />
      employeePagination: {
        //人员分派分页
        pageIndex: 1,
        pageSize: 5,
        totalCount: 1,
        pageCount: 0
      },

    **注意事项
        在获取到数据之后,务必重置分页参数
        例: this.paginationOpt.totalCount = result.data.total;
             this.paginationOpt.pageCount = Math.ceil(this.paginationOpt.totalCount / this.paginationOpt.pageSize);
             获取完数据之后,执行固定代码   !!cb && cb();

        //列表
              dataList(cb) {
                var self = this;
                api.request("redpacketList", Object.assign(self.data_), result => {
                  if (result.status == 0) {
                    self.list = result.data.list;
                    self.employeePagination.totalCount = result.data.total;
                    self.employeePagination.pageCount = Math.ceil(
                      result.data.total / self.employeePagination.pageSize
                    );
                  } else {
                    self.$message.error(result.message);
                  }
                });
                !!cb && cb();
              },

    //mothod里面增加分页调用方法
    employeePagesFn(pageIndex, cb) { //pageIndex --- 分页组件返回的页码,    cb ---- 主要目的是为分页加锁,固定参数
      let self = this;
      self.employeePagination.pageIndex = pageIndex;
      self.data_.pageIndex = pageIndex;
      self.dataList(cb);
    }

    具体调用,请参考客户列表
 */
export default {
    name: ‘pagination‘,
    props: {
        ‘paginationOpt‘: {
            default: () => {
                return {}
            }
        }
    },
    data () {
        return {
            clock: false,
            whichPage: ‘‘
        }
    },
    mounted(){

    },
    methods: {
        action (type) {
            let _this = this;
            switch( type ){
                  case ‘prev‘:
                      if(_this.clock == false){
                          _this.whichPage = ‘‘;
                          _this.paginationOpt.pageIndex--;
                          _this.clock = true;
                          _this.$emit(‘switchPage‘, _this.paginationOpt.pageIndex, function(){
                              _this.clock = false;
                          });
                      }
                      break;
                  case ‘next‘:
                          _this.whichPage = ‘‘;
                      if(_this.clock == false){
                          _this.paginationOpt.whichPage = ‘‘;
                          _this.paginationOpt.pageIndex++;
                          _this.clock = true;
                          _this.$emit(‘switchPage‘, _this.paginationOpt.pageIndex, function(){
                              _this.clock = false;
                          });
                      }
                      break;
                  case ‘gotowhich‘:
                      /* 验证正整数 */
                      if (!/^\d+$/.test(_this.whichPage)) {
                          break;
                      }
                      /* 必须大于0 */
                      if (parseInt(_this.whichPage) <= 0) {
                          break;
                      }
                      /* 超出最大页数时不跳转 */
                      if (parseInt(_this.whichPage) > parseInt(_this.paginationOpt.pageCount)) {
                          break;
                      }
                      if(_this.clock == false){
                          _this.paginationOpt.pageIndex = _this.whichPage;
                          _this.clock = true;
                          _this.$emit(‘switchPage‘, _this.paginationOpt.pageIndex, function(){
                              _this.clock = false;
                          });
                      }
                      break;
              }
        }
    }
}
</script>
<style scoped>

/*分页样式 start*/
.pagination {
  width: 100%;
  height: 30px;
  line-height: 30px;
  font-size: 12px;
  /*text-align: center;*/
}

.pagination .mr5 {
  margin-right: 5px;
}

.pagination .ml5 {
  margin-left: 5px;
}

.pagination .ml10 {
  margin-left: 10px;
}

.pagination .mr10 {
  margin-right: 10px;
}

.pagination .next, .pagination .prev {
  position: relative;
  display: inline-block;
  width: 30px;
  height: 30px;
  border: 1px solid #dee4e9;
  border-radius: 4px;
  vertical-align: middle;
  cursor: pointer;
}

.pagination .triangle-left {
  position: absolute;
  left: 11px;
  top: 9px;
  width: 0;
  height: 0;
  border-top: 5px solid transparent;
  border-right: 6px solid #3C4A55;
  border-bottom: 5px solid transparent;
}

.pagination .triangle-right {
  position: absolute;
  left: 12px;
  top: 9px;
  width: 0;
  height: 0;
  border-top: 5px solid transparent;
  border-left: 6px solid #3C4A55;
  border-bottom: 5px solid transparent;
}

.pagination .prev.disabled .triangle-left {
  border-right: 6px solid #dee4e9;
}

.pagination .next.disabled, .pagination .prev.disabled {
  cursor: default;
}

.pagination .next.disabled .triangle-right {
  border-left: 6px solid #dee4e9;
}

.pagination input {
  display: inline-block;
  width: 40px;
  height: 30px;
  border: 1px solid #dee4e9;
  padding-left: 5px;
  border-radius: 4px 0 0 4px;
}

.pagination .go {
  display: inline-block;
  width: 30px;
  height: 30px;
  line-height: 30px;
  border-radius: 0 4px 4px 0;
  background-color: #00BAD0;
  color: #fff;
  text-align: center;
  cursor: pointer;
}
.text-right {
    text-align: right;
}
/*分页样式 end*/
</style>

原文地址:https://www.cnblogs.com/qlongbg/p/12566790.html

时间: 2024-10-01 19:20:16

vue分页组件封装的相关文章

打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demoback.lalalaweb.com  前台:demo.lalalaweb.com 演示过程中可能会发现bug,希望即时留言反馈,谢谢 源码下载:https://github.com/sutianbinde/classweb               //不是全部的代码,每次更新博客才更新代码 学

vue分页组件table-pagebar

之前一直接触都是原始的前端模型,jquery+bootstrap,冗杂的dom操作,繁琐的更新绑定.接触vue后,对前端MVVM框架有了全新的认识.本文是基于webpack+vue构建,由于之前的工作主要是基于java的服务端开发工作,对前端框架和组件的理解,不够深入,借此来记录在前端框架使用和构建中的点点滴滴. 此分页组件参照于bootstrap-datatable底部分页开发完成,相关参数增加自定义功能. 最终使用展现效果图如下,数据来源于cnodejs[https://cnodejs.or

vue分页组件重置到首页问题

分页组件,可以借用这个老哥的@暴脾气大大https://www.cnblogs.com/sebastian-tyd/p/7853188.html#4163272 但是有一个问题就是下面评论中@ Mrzhong提到的问题,我也遇到了: 就是第一次获取数据点击到第二页:然后切换选择条件currentpage是1,获取的数据也是第一页的,但是分页组件的样式还是在第二页上,没有重置到首页: 然后各种搜,终于找到了解决方法: 就是给引用的分页子组件绑定一个key值 原文地址:https://www.cnb

vue分页组件

Vue.component('page', { template:'<div class="row"><div class="col-lg-3 col-md-3 col-sm-3 form-inline text-center"> <span >每页显示</span> <select name="dataNum" id="dataNum" class="form-

vue分页

vue分页组件:<el-pagination background layout="total,prev, pager, next,jumper" :current-page="currentPage" :page-size="page_size" @current-change="handleCurrentChange" :total="Number(page)"></el-pagina

基于Vue封装分页组件

使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} .page-bar { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-sel

基于Vue的简单通用分页组件

分页组件是每一个系统里必不可少的一个组件,分页组件分为两部分.第一部分是模版部分,用于显示当前分页组件的状态,例如正在获取数据.没有数据.没有下一页等等:第二部分是分页数据对象,用于封装一个分页组件的属性和方法,例如获取数据的 url.当前第几页(page).每次加载条数(count).一共有多少页(totalPage)等等,方法可能会有上一页.下一页.处理数据等等. 分页数据对象 import base from '@/api/base' export default class Pagina

基于Vue.js的表格分页组件

BootPage组件简介 其实也不是啥高大上的组件了,相反确实一个简单的表格分页组件而已,主要是自己最近项目中需要一个表格分页组件,而Vue官方组件库里分页组件都功能太强大或者没有适合我的,所以就自己写了一个凑合着用,或许有人和我一样需要这样一个简单的分页组件来实现简单的分页功能,我便在这里分享一下,大家自觉填坑咯. 如需高大上的组件,可以移步Vue官方组件库:https://github.com/vuejs/awesome-vue#libraries--plugins BootPage是一款支

angular封装分页组件

1)分页模板页面product_pag.html <div style="margin-right:4px;float:right;"> <span style="color: blue; margin-right: 6px;">总 页 数 <strong class="colorred">{{pageObj.totalPage}}</strong> </span> <span s