element-ui的pagination分页 增加首页和末页

在使用element-ui的pagination分页时,发现没有跳转到首页和末页的功能,那么现在就自己来实现一下这个功能。

实现后如下图所示
在这里插入图片描述先上完整代码

<template>
  <div class="container">
    <el-pagination
      class="rear-page"
      :current-page="tablePage.currentPage"
      :page-sizes="pageSizeArr"
      :page-size="tablePage.pageSize"
      layout="prev, pager, next, slot, jumper, sizes, total"
      :total="tablePage.totalResult"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    >
      <!-- slot部分,跳转末页 -->
      <button
        class="lastPage"
        :disabled="tablePage.lastPageDisabled"
        @click="toLastPage"
      >
        <i class="el-icon-d-arrow-right"></i>
      </button>
    </el-pagination>
    <el-pagination
      class="ahead-page"
      :current-page="tablePage.currentPage"
      :page-sizes="pageSizeArr"
      :page-size="tablePage.pageSize"
      layout="slot"
      :total="tablePage.totalResult"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    >
      <!-- slot部分,跳转首页 -->
      <button
        class="firstPage"
        :disabled="tablePage.firstPageDisabled"
        @click="toFirstPage"
      >
        <i class="el-icon-d-arrow-left"></i>
      </button>
    </el-pagination>
  </div>
</template>
<script>
export default {
  data() {
    return {
      pageSizeArr: [10, 20, 30, 40], //  显示条目数组
      tablePage: {
        currentPage: 1, //  当前页
        pageSize: 10, //  展示数量
        totalResult: 100, //  总数
        firstPageDisabled: false, //  首页
        lastPageDisabled: true, //  末页
      },
    };
  },
  watch: {
    // 分页 计算首页和末页
    tablePage: {
      handler(newVal) {
        let pages = Math.ceil(newVal.totalResult / newVal.pageSize);
        if (pages === 0) {
          // 数据(totalResult)为0
          this.tablePage.firstPageDisabled = true; // 首页按钮是否禁用
          this.tablePage.lastPageDisabled = true; // 末页按钮是否禁用
        } else {
          this.tablePage.firstPageDisabled = newVal.currentPage === 1;
          this.tablePage.lastPageDisabled = newVal.currentPage === pages;
        }
      },
      // 一进页面就执行
      immediate: true,
      deep: true,
    },
  },
  methods: {
    //   改变页码
    handlePageChange({ currentPage, pageSize }) {
      this.tablePage.currentPage = currentPage;
      this.tablePage.pageSize = pageSize;
    },

    //   改变每页显示数量
    handleSizeChange(pageSize) {
      this.tablePage.pageSize = pageSize;
    },

    //   改变当前页码
    handleCurrentChange(currentPage) {
      this.tablePage.currentPage = currentPage;
    },

    //   前往首页
    toFirstPage() {
      this.handleCurrentChange(1);
    },

    //  前往末页
    toLastPage() {
      let max = Math.ceil(this.tablePage.totalResult / this.tablePage.pageSize);
      this.handleCurrentChange(max);
    },
  },
};
</script>
<style scoped>
.el-pagination {
  float: right;
  margin-top: 10px;
}
.el-pagination.ahead-page {
  padding-right: 0px;
}
.el-pagination.rear-page {
  padding-left: 0px;
}
.firstPage,
.lastPage {
  background-color: white;
  cursor: pointer;
}
</style>

实现的原理是利用slot来自定义内容,就是带有首页和末页的完整分页由两个pagination组件组成

<el-pagination
      class="rear-page"
      :current-page="tablePage.currentPage"
      :page-sizes="pageSizeArr"
      :page-size="tablePage.pageSize"
      layout="prev, pager, next, slot, jumper, sizes, total"
      :total="tablePage.totalResult"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    >
      <!-- slot部分,跳转末页 -->
      <button
        class="lastPage"
        :disabled="tablePage.lastPageDisabled"
        @click="toLastPage"
      >
        <i class="el-icon-d-arrow-right"></i>
      </button>
    </el-pagination>
    <el-pagination
      class="ahead-page"
      :current-page="tablePage.currentPage"
      :page-sizes="pageSizeArr"
      :page-size="tablePage.pageSize"
      layout="slot"
      :total="tablePage.totalResult"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    >
      <!-- slot部分,跳转首页 -->
      <button
        class="firstPage"
        :disabled="tablePage.firstPageDisabled"
        @click="toFirstPage"
      >
        <i class="el-icon-d-arrow-left"></i>
      </button>
    </el-pagination>

其他的核心部分

  • 判断首页和末页button的disabled属性值
watch: {
    // 分页 计算首页和末页
    tablePage: {
      handler(newVal) {
        let pages = Math.ceil(newVal.totalResult / newVal.pageSize);
        if (pages === 0) {
          // 数据(totalResult)为0
          this.tablePage.firstPageDisabled = true; // 首页按钮是否禁用
          this.tablePage.lastPageDisabled = true; // 末页按钮是否禁用
        } else {
          this.tablePage.firstPageDisabled = newVal.currentPage === 1;
          this.tablePage.lastPageDisabled = newVal.currentPage === pages;
        }
      },
      // 一进页面就执行
      immediate: true,
      deep: true,
    },
  },

如果本文对你有帮助,请点个赞吧!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Element-ui是一套基于Vue.js的前端UI组件库,它提供了丰富的组件和工具,包括分页组件。Element-ui分页组件可以帮助开发者实现前端分页效果。 在使用Element-ui分页组件之前,首先需要引入Element-ui库,并按照文档中的指引进行安装和配置。接下来,我们可以在Vue组件中使用Element-ui分页组件,通过设置不同的属性来实现不同的分页效果。 Element-ui分页组件提供了以下几个重要的属性: 1. current-page:当前页码,通过设置该属性可以指定当前所在的页码位置。 2. page-size:每页显示的数据条数,通过设置该属性可以指定每页显示的数据量。 3. total:总数据量,通过设置该属性可以指定总共有多少条数据。 4. layout:分页组件的布局方式,通过设置该属性可以自定义分页组件的显示样式。 举个例子,如果我们想要实现一个每页显示10条数据的分页效果,可以按照以下步骤进行操作: 1. 在Vue组件中引入Element-ui分页组件。 2. 在data属性中定义currentPage和pageSize两个变量,分别表示当前页码和每页显示的数据量。 3. 在模板中使用<el-pagination>标签,并设置current-page、page-size和total等属性,来实现基本的分页展示。 4. 根据需求,可以通过设置layout属性来自定义分页组件的布局方式。 注意,这只是一个简单的例子,实际的使用可能还需要根据具体的业务需求进行适当的修改和调整。希望以上信息能够帮助到你,如果还有其他问题,请随时提问。<span class="em">1</span> #### 引用[.reference_title] - *1* [vue+Element-ui前端实现分页效果](https://download.csdn.net/download/weixin_38661650/14752574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值