Element组件之分页的使用,特别是page-count的坑

首先分页的使用并不难,只要按照官方文档所写即可,但是里面还有有一些需要大家注意的。

话不多说,先上代码

<template>
    <div class="common_small_page">
        <el-pagination
                small
                class="pop_small_page"
                background
                layout="prev, pager, next"
                :currentPage.sync='currentPageNum'
                :pageSize='pageSize
                @current-change="handleCurrentChange"
                @prev-click="handleCurrentChange"
                @next-click="handleCurrentChange"
                :total="total"
                >
        </el-pagination>
    </div>
</template>

你会发现我用了small属性,没错,我这个分页使用的场合就是在局部小页面中所展示的。

这里需要大家主要的是,组件中的属性前面要加:,组件中的方法前要加@

然后是data数据以及获取父组件传来的值。(先说一下,这个分页功能我是封装了,这里是在调用它)
在这里插入图片描述
至于所用的方法

handleCurrentChange(val) {
                this.firstPageBtnDisabled = val === 1 ? true : false;
                this.lastPageBtnDisabled = val === this.lastPageNum ? true : false;
                this.currentPageNum = val;
                this.$emit("handleCurrentChangeSub", val);
            }

这里我所得到的效果图为
在这里插入图片描述
写完这些后,我就测试看很多条数据的时候是什么样子,结果发现他没有因为页数过多中间页码自动省略号,原来这个需要自己去设置一下。于是加了一个属性page-count,也就是我要讲的一个坑。

在没有加page-count属性的时候,我页码是这样的
在这里插入图片描述
在加上page-count后,页面效果是这样的,这里我设置的page-count为3
在这里插入图片描述
但是可以发现控制台有报错,报错是: [Vue warn]: Invalid prop: custom validator check failed for prop “pagerCount”.
在这里插入图片描述

找了很久的解决方式,最后我的解决方法是,pager-count只能设置5-21的奇数,无法实现只显示两个页码

这样局部的分页就算写好了,正常的页面分页也差不多这样写。你们有好的解决方法可以评论留言,大家一起学习。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
您可以通过在项目中创建一个全局的分页组件来实现给所有element-plus分页加一个属性的功能。具体步骤如下: 1. 在项目中创建一个全局的分页组件,例如命名为GlobalPagination.vue。 2. 在GlobalPagination.vue中引入element-plus的分页组件,并将其封装为一个新的组件。 3. 在新的组件中添加您需要的属性,并将其传递给element-plus的分页组件。 4. 在项目中使用新的全局分页组件代替element-plus的默认分页组件即可。 以下是示例代码,您可以根据自己的需求进行修改: ```vue <template> <el-pagination :page-size="pageSize" :total="total" :current-page.sync="currentPage" :layout="layout" :prev-text="prevText" :next-text="nextText" :disabled="disabled" :hide-on-single-page="hideOnSinglePage" :page-count="pageCount" :pager-count="pagerCount" :popper-class="popperClass" :prev-ellipsis="prevEllipsis" :next-ellipsis="nextEllipsis" :background="background" :page-sizes="pageSizes" :popper-append-to-body="popperAppendToBody" @size-change="handleSizeChange" @current-change="handleCurrentChange" @prev-click="handlePrevClick" @next-click="handleNextClick" /> </template> <script> import { ElPagination } from "element-plus"; export default { name: "GlobalPagination", components: { ElPagination, }, props: { pageSize: Number, total: Number, currentPage: Number, layout: String, prevText: String, nextText: String, disabled: Boolean, hideOnSinglePage: Boolean, pageCount: Number, pagerCount: { type: Number, default: 7, }, popperClass: String, prevEllipsis: { type: Boolean, default: true, }, nextEllipsis: { type: Boolean, default: true, }, background: Boolean, pageSizes: Array, popperAppendToBody: { type: Boolean, default: true, }, }, methods: { handleSizeChange(val) { this.$emit("size-change", val); }, handleCurrentChange(val) { this.$emit("current-change", val); }, handlePrevClick(val) { this.$emit("prev-click", val); }, handleNextClick(val) { this.$emit("next-click", val); }, }, }; </script> ``` 在项目中使用GlobalPagination组件代替element-plus的默认分页组件即可。 ```vue <template> <div> <GlobalPagination :page-size="pageSize" :total="total" :current-page.sync="currentPage" :layout="layout" :prev-text="prevText" :next-text="nextText" :disabled="disabled" :hide-on-single-page="hideOnSinglePage" :page-count="pageCount" :pager-count="pagerCount" :popper-class="popperClass" :prev-ellipsis="prevEllipsis" :next-ellipsis="nextEllipsis" :background="background" :page-sizes="pageSizes" :popper-append-to-body="popperAppendToBody" @size-change="handleSizeChange" @current-change="handleCurrentChange" @prev-click="handlePrevClick" @next-click="handleNextClick" /> </div> </template> <script> import GlobalPagination from "@/components/GlobalPagination.vue"; export default { components: { GlobalPagination, }, data() { return { pageSize: 10, total: 100, currentPage: 1, layout: "total, sizes, prev, pager, next, jumper", prevText: "<", nextText: ">", disabled: false, hideOnSinglePage: false, pageCount: 10, pagerCount: 7, popperClass: "", prevEllipsis: true, nextEllipsis: true, background: false, pageSizes: [10, 20, 30, 40], popperAppendToBody: true, }; }, methods: { handleSizeChange(val) { console.log(`每页 ${val} 条`); }, handleCurrentChange(val) { console.log(`当前页: ${val}`); }, handlePrevClick(val) { console.log(`上一页: ${val}`); }, handleNextClick(val) { console.log(`下一页: ${val}`); }, }, }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rayong有分享

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值