对elementUI的Pagination组件二次封装

98 阅读1分钟

为什么要二次封装

因为我们使用这种分页器的时候,每次都要复制一长串代码。

image.png

所以,我计划对pagination组件进行二次封装。

代码

创建公共组件Pagination.vue

<template>
  <el-pagination
    style="margin: 10px auto"
    @size-change="handleSizeChange"
    @current-change="handlePageChange"
    background
    :current-page="data.page"
    :page-sizes="[10, 20, 30, 40]"
    :page-size="data.size"
    layout="total, sizes, prev, pager, next, jumper"
    :total="data.total"
  >
  </el-pagination>
</template>
<script>
export default {
  name: 'Pagination',
  props: {
    data: {
      type: Object,
      default () {
        return {
          page: 1,
          size: 10,
          total: 0
        }
      }
    }
  },
  data () {
    return {}
  },
  created () {},
  methods: {
    handleSizeChange (val) {
      this.data.size = val
      this.$emit('onPagePaging')
    },
    handlePageChange (val) {
      this.data.page = val
      this.$emit('onPagePaging')
    }
  }
}
</script>

在组件中使用

// 在引入、注册后
<Pagination :data="formInline" @onPagePaging="getData"></Pagination>

// 分页参数
      formInline: {
        type: 'scene',
        page: 1, // 必传
        size: 10, // 必传
        total: 20 // 因为有总计,所以必传
      },
//  获取数据中的total
getdata() {
      RuleList(this.formInline).then((rst) => {
        this.formInline.total = rst.total;
      });
    },