Vue 中基于element-ui二次封装Pagination分页组件

Vue 中基于element-ui二次封装Pagination分页组件

<template>
  <el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="[1, 2, 5, 10]"
    :page-size="pageSize"
    :layout="layout"
    :total="total"
  >
  </el-pagination>
</template>

<script>
export default {
  props: {
    currentPage: {
      type: [String, Number],
      default: 1,
    },
    total: {
      type: [String, Number],
      default: 0,
    },
    pageSizes: {
      type: Array,
      default: () => [10, 15, 30, 50],
    },
    pageSize: {
      type: [String, Number],
      default: 10,
    },
    // prev表示上一页,next为下一页,pager表示页码列表,jumper表示跳页元素,total表示总条目数,size用于设置每页显示的页码数量
    // total, sizes, prev, pager, next, jumper
    layout: {
      type: String,
      default: "total, sizes, prev, pager, next, jumper",
    },
  },
  data() {
    return {};
  },
  methods: {
    handleSizeChange(val) {
      // 子组件向父组件传值
      this.$emit("sizeChange", val);
    },
    handleCurrentChange(val) {
      this.$emit("currentChange", val);
    },
  },
};
</script>
<style lang="less" scoped>
.page {
  text-align: center;
  color: #409eff;
}
</style>

使用组件

<template>
 <Pagination @sizeChange='handleSizeChange' 
    :pageSize='pageSize' 
    @currentChange='handleCurrentChange'
      :currentPage='currentPage' :total='total'></Pagination>
</template>

<script>
  import qs from 'qs'
  import Pagination from '@/components/utils/Pagination'

  export default {
    components: {
      Pagination,
    },
    data() {
      return {
        globalList: [],
        // 当前页数量
        pageSize: 1,
        // 当前页
        currentPage: 1,
        // 总数
        total: 1,
      }
    },
    created() {
      this.getNewsList(this.tag)
    },

    methods: {
      getNewsList(tagName) {
        console.log(tagName)
        const param = {
          'page': this.currentPage,
          'size': this.pageSize,
        }
        this.$axios({
          url: "/api/art/findTag", //请求地址
          method: "post", //请求方式
          data: qs.stringify(param)
        }).then(res => {
          // ok表示请求成功的数据
          console.log(res)
          // 把请求到的数据给testDatas数组
          this.globalList = res.data.data.list
          // 当前页数
          this.currentPage = res.data.data.pageNum
          // 当前页数量
          this.pageSize = res.data.data.pageSize
          // 分页总数
          this.total = res.data.data.total
          console.log(JSON.stringify(res.data.data.total))
        });
      },
      // 监听 pagesize改变的事件
      handleSizeChange(newSize) {
        //  console.log(`每页 ${val} 条`);
        console.log(newSize)
        this.pageSize = newSize
        this.getNewsList()
      },
      // 监听 页码值 改变事件 第几页
      handleCurrentChange(newSize) {
        //  console.log(`当前页: ${val}`);
        console.log("111:" + newSize)
        this.currentPage = newSize
        this.getNewsList()
      },
    },
  }
</script>
  • 0
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

追梦男孩~

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值