二次封装el-pagination分页器

4 篇文章 0 订阅
1 篇文章 0 订阅

直接引入el-pagination使用时个人觉得每页都需要写一个页码以及页数切换的函数有点繁琐,为了方便将组件以及方法封装起来使用更加方便了。以下是代码实例:

1.新建封装分页方法文件page.js

const initData = {
    page: 1,
    pageSize: 10,
    total: 0
}

const handlePage = (type, val, ctx, fn) => {
    if (ctx?.total === 0) return
    if (type === 'pageSize') {
        ctx.pageSize = val
    } else {
        ctx.page = val
    }
    fn?.()
}

export const usePage = init => {
    return [
        init || initData,
        handlePage
    ]
}

2.新建my-pagination.vue

<template>
    <div class="pagination" :style="`text-align: ${textAlign};`">
        <el-pagination
            @size-change="val => $emit('updatePage', 'pageSize', val)"
            @current-change="val => $emit('updatePage', 'page', val)"
            :current-page="page"
            :page-sizes="pageSizeList"
            :page-size="pageSize"
            :layout="layout"
            :total="total"
        />
    </div>
</template>

<script>
    export default {
        name: 'Pagination',
        props: {
            total: {
                type: Number,
                default: 0
            },
            page: {
                type: Number,
                default: 1
            },
            pageSize: {
                type: Number,
                default: 10
            },
            pageSizeList: {
                type: Array,
                default: () => [10, 30, 50]
            },
            layout: {
                type: String,
                default: 'prev, pager, next, jumper, total, sizes'
            },
            textAlign: {
                type: String,
                default: 'left'
            }
        }
    }
</script>

<style scoped lang="scss">
    .pagination{
        margin-top: 15px;
        /deep/ .el-pagination__jump{
            margin: 0 10px;
        }
    }
</style>

3.引入my-pagination.vue并且注册,引入page.js

4.使用组件

<template>
    <div class="">
        <my-pagination
            :page="page"
            :page-size="pageSize"
            :total="total"
            @updatePage="Page"
        />
    </div>
</template>

<script>
import { usePage } from '@/utils/page'
import myPagination from './my-pagination.vue'

const [pageData, setPage] = usePage()
export default {
    components:{
        myPagination,
    },
    data () {
        return {
            ...pageData,
        }
    },
    methods: {
        // 分页处理函数
        Page (type, val) {
            setPage(type, val, this, this.getList)
        },
        // 获取数据
        async getList () {
            try {
                
            } catch (e) {
                this.$message.error(e.message)
            } finally {
            }
        },
    },
    mounted () {
        this.getList()
    }
}
</script>

<style lang="scss" scoped>

</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值