二次封装el-pagination组件

 0 0条评论

element-plus版本:2.2.2。

element组件库中的分页组件是经常要要用到的,详细使用方法可以看一下官网

由于该组件涉及到很多事件和属性,所以我这里进行了二次封装,项目使用起来更方便。

新建Pagination.vue组件,模版代码如下:

<template>
    <el-pagination :page-sizes="[10, 20, 30]" v-model:page-size="pageSize" 
        v-model:current-page="currentPage" background
        layout="total,sizes,prev, pager, next,jumper" 
        :page-count="props.totalPage">
    </el-pagination>
</template>

网上有些page-size和current-page可以不用双向绑定,直接父组件双向绑定pageSize和currentPage即可,实际操作并不可行,直接报错,而且根本无法加载组件,所以这里必须是v-model,其他参数根据自己需求修改吧。

ts代码如下,使用了setup语法糖和自动导入vue相关组件,可以看我之前的文章

<script lang="ts" setup>
const props = defineProps({
    /**
    * 每页显示的数量,默认10
    */
    pageSize: {
        type: Number,
        default: 10
    },
    /**
    * 当前页码,默认1
    */
    currentPage: {
        type: Number,
        default: 1
    },
    /**
    * 总页数,默认0
    */
    totalPage: {
        type: Number,
        default: 0,
        required: true
    },
    /**
    * 分页变更后,执行的方法
    */
    loadFn:{
        type:Function,
        default:()=>{}
    }
})// 本地接收
const currentPage=ref(props.currentPage)
const pageSize=ref(props.pageSize)
const emit = defineEmits(['update:pageSize','update:currentPage'])

watch([() => currentPage.value], () => {
    emit('update:currentPage',currentPage.value)
    props.loadFn()
})
watch([ () => pageSize.value], () => {
    emit('update:pageSize',pageSize.value)
    props.loadFn()
})
</script>

由于prpo里的数据不可以修改的,所以父组件传来数据后,需要本地再接收一下,然后在通过emit的update事件,来改变props里的值。

最后父组件代码如下:

<sh-pagination v-model:currentPage="currentPage" 
    v-model:pageSize="pageSize" 
    :total="total" 
    :totalPage="totalPage" 
    :loadFn="initList"></sh-pagination>

至此完成el-pagination组件的二次封装。

本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客