对element-ui分页组件Pagination再简化

重置组件目的

在使用Pagination分页组件时 每用一次就要定义一个变量来存储 current-page 与 page-size 并且要定义两个方法size-change与current-change进行分页切换甚是繁琐于是对Pagination分页组件再简化。

组件代码 (简化后代码兼容原有使用方法)

<template>
    <!--分页器-->
    <div style="margin-top: 20px; margin-bottom: 20px; padding-bottom: 20px">
        <el-pagination :small="small" @current-change="handleCurrentChange" @size-change="handleSizeChange"
                       :page-size.sync="customPageSize" :page-count="pageCount" :page-sizes="pageSizes"
                       :pager-count="pagerCount"
                       :current-page.sync="customCurrentPage" :layout="layout"
                       :total="customTotal" :popper-class="popperClass" :prev-text="prevText" :next-text="nextText"
                       :background="background" :disabled="disabled" :hide-on-single-page="hideOnSinglePage"
                       style="text-align: right"></el-pagination>
    </div>
</template>

<script>
    /*自定义分页 - element-ui分页再封装*/
    export default {
        name: "ElPaginationCustom",
        data() {
            return {
                localPageNo:1,
                localPageSize:10,
                localTotal:0
            }
        },
        props: {
            pageSize: {
                type: Number,
                default: 10
            },
            small: Boolean,
            total:{
                type: Number,
                default: 0
            },
            pageCount: Number,
            pagerCount: {
                type: Number,
                validator(value) {
                    return (value | 0) === value && value > 4 && value < 22 && (value % 2) === 1;
                },
                default: 7
            },
            currentPage: {
                type: Number,
                default: 1
            },
            layout: {
                default: 'total, sizes, prev, pager, next, jumper'
            },
            pageSizes: {
                type: Array,
                default() {
                    return [10, 100, 500, 1000];
                }
            },
            popperClass: String,
            prevText: String,
            nextText: String,
            background: Boolean,
            disabled: Boolean,
            hideOnSinglePage: Boolean
        },
        computed: {
            customPageSize: {
                get: function () {
                    return this.localPageSize;
                },
                set: function (val) {
                    this.localPageSize = val;
                    this.$emit('update:pageSize', val);
                }
            },
            customCurrentPage: {
                get: function () {
                    return this.localPageNo;
                },
                set: function (val) {
                    this.localPageNo = val;
                    this.$emit('update:currentPage', val);
                }
            },
            customTotal:{
                get: function () {
                    return this.localTotal;
                }
            }
        },
        watch:{
            pageSize:{
                handler:function (val) {
                    this.localPageSize = val;
                },
                immediate:true,
                deep:true
            },
            currentPage:{
                handler:function (val) {
                    this.localPageNo = val;
                },
                immediate:true,
                deep:true
            },
            total:{
                handler:function (val) {
                    this.localTotal = val;
                },
                immediate:true,
                deep:true
            }
        },
        methods: {
            handleCurrentChange(val) {
                this.$emit('current-change', val);
                this.handleAll(val,this.customPageSize)
            },
            handleSizeChange(val) {
                this.$emit('size-change', val);
                this.handleAll(this.customCurrentPage,val)
            },
            handleAll(pageNo,pageSize){
                this.$emit('current-size-change',pageNo,pageSize)
            }
        }
    }
</script>

<style scoped>

</style>

未简化前使用(我们使用组件没用一次分页组件都要多个字段来存储分页数的值和分页大小及切换方法)

<template>
    <!--分页器1-->
     <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page.sync="pageNo"
      :page-size.sync="pageSize"
      layout="total, prev, pager, next"
      :total="1000">
    </el-pagination>
     <!--分页器2-->
     <el-pagination
      @size-change="handleSizeChange2"
      @current-change="handleCurrentChange2"
      :current-page.sync="pageNo2"
      :page-size.sync="pageSize2"
      layout="total, prev, pager, next"
      :total="1000">
    </el-pagination>
</template>
<script>
  export default {
    methods: {
      handleSizeChange(val) {
        console.log(`每页 ${val} 条`);
      },
      handleCurrentChange(val) {
        console.log(`当前页: ${val}`);
      },
     handleSizeChange2(val) {
        console.log(`每页 ${val} 条`);
      },
      handleCurrentChange2(val) {
        console.log(`当前页: ${val}`);
      }
    },
    data() {
      return { 
        pageNo: 1,
        pageSize:10,
        pageNo2: 1,
        pageSize2:10
      };
    }
  }
</script>

简化后使用 (我们就不再需要定义这些字段来存储这些值了 且只要定义一个方法来进行切换想要改变值直接改 this.refs['pagination'].localPageNo、 this.refs['pagination'].localPageSize 这样字段也减少不少 )

<template>
 <!--分页器1-->
 <el-pagination-custom ref="pagination" background @current-size-change="handleCurrentSizeChange"></el-pagination-custom>
 <!--分页器2-->
 <el-pagination-custom ref="pagination2" background @current-size-change="handleCurrentSizeChange2"></el-pagination-custom>
</template>
<script>
  export default {
    methods: {
     //搜索
      search() {
          this.$refs['pagination'].localPageNo = 1;
          this.$refs['pagination'].localPageSize = 10;
          this.getTableData()
        },
      //拉取数据1
      getTableData(){
          this.$http.get('········',{
             page: this.$refs['pagination'].localPageNo,
             pageSize: this.$refs['pagination'].localPageSize
          }).then(res=>{
          })
      },
     getTableData2(){
          this.$http.get('········',{
             page: this.$refs['pagination2'].localPageNo,
             pageSize: this.$refs['pagination2'].localPageSize
          }).then(res=>{
          })
      },
      handleCurrentSizeChange(pageNo,pageSize) {
        console.log(`当前页: ${pageNo}`);
        console.log(`每页 ${pageSize} 条`);
      },
      handleCurrentSizeChange2(pageNo,pageSize) {
        console.log(`当前页: ${pageNo}`);
        console.log(`每页 ${pageSize} 条`);
      }
    },
    data() {
      return {  };
    },
    mounted(){
      //mounted中正常使用
      this.search();
    },
    created() {
       //在created拉取数据因为dom树还没挂载需要使用$nextTick进行延迟调用
       this.$nextTick(function () {
           this.getTableData2();
       })
    }
  }
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355