基于vue+element 分页的封装

项目场景:

分页也是我们在实际应用当中非常常见的存在,其实分页本身在element中做的就挺好的了,但是使用确实非常的多,所以还是有必要封装一下,主要是为了减少代码的冗余,以及提升开发的效率和降低后续维护的成本。


认识分页

这是一段普通分页的示例

<template>
  <div class="block">
    <span class="demonstration">完整功能</span>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[100, 200, 300, 400]"
      :page-size="100"
      layout="total, sizes, prev, pager, next, jumper"
      :total="400">
    </el-pagination>
  </div>
</template>
 
 <script>
  export default {
    methods: {
      handleSizeChange(val) {
        console.log(`每页 ${val}`);
      },
      handleCurrentChange(val) {
        console.log(`当前页: ${val}`);
      }
    },
    data() {
      return {
        currentPage: 4
      };
    }
  }
</script>

效果是这样的

在这里插入图片描述
在这当中用到了我们常用的七个字段:

1.current-page

:current-page="currentPage"

代表的是当前在第几页,并且可以输入进行跳转任意存在的页数,主要效果如下:
在这里插入图片描述

2.page-sizes

:page-sizes="[100, 200, 300, 400]"

用于设置分页每页显示多少条,主要效果如下:
在这里插入图片描述

3.page-size

:page-size="100"

设置默认显示多少条(这里默认为100条),主要效果如下:
在这里插入图片描述

4.layout

layout="total, sizes, prev, pager, next, jumper"

用于设置组件布局,子组件名用逗号分隔,效果如下:
在这里插入图片描述
字段说明:

  • total : 总页数
  • sizes:一页显示多少条
  • prev:上一页
  • pager:点击页数跳转(只允许跳转上下两页以及起止页)
  • next:下一页
  • jumper:输入跳转任意存在页

5.total

:total="400"

展示总页数,效果如下。
在这里插入图片描述

6.size-change

@size-change="handleSizeChange"

触发事件,当page-size改变时触发,也就是当页面改变时触发。
在这里插入图片描述

7.current-change

@current-change="handleCurrentChange"

触发事件,currentPage 改变时会触发,也就是修改每页显示多少条时触发。


封装分页:

弄清楚每个字段的意思后便可以进行封装了。
主要思路是,封装的组件通过父组件将currentPage,total,sizes,pager,jumper传入,并且在触发@size-change,@current-change事件时,将事件信息传给父组件。

创建paging:

在这里插入图片描述

进行封装

<!-- 
	author:Wh1T3ZzT
	component:分页
	time:2023/07/25
-->
<template>
  <div class="paging">
    <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage"
        :page-sizes="pageSizes"
        :page-size="pageSize"
        :layout="layout"
        :total="total">
      </el-pagination>
  </div>
</template>

<script>
export default {
  data(){
    return{
    }
  },
  props:{
    currentPage:{
      default(){
        return [];
      }
    },
    pageSizes:{
      default(){
        return [];
      }
    },
    pageSize:{
      default(){
        return [];
      }
    },
    layout:{
      default(){
        return [];
      }
    },
    total:{
      default(){
        return [];
      }
    }
  },
  methods:{
    handleSizeChange(val) {
      this.$emit('handleSizeChange',val)
      console.log(`传给父组件:每页 ${val}`);
    },
    handleCurrentChange(val) {
      this.$emit('handleCurrentChange',val)
      console.log(`传给父组件:当前页: ${val}`);
    },
  }
}
</script>

<style>

</style>

封装完成!


页面中使用:

引入

<template>
  <div>
    <Paging 
       :currentPage="1" 
       :pageSizes="[5,10,20,50,100]" 
       :pageSize="10" 
       layout="total, sizes, prev, pager, next, jumper" 
       :total="10" 
       @handleSizeChange="PagingSizeChange" 
       @handleCurrentChange="PagingCurrentChange"
     ></Paging>
  </div>
</template>

<script>
import Paging from '@/components/paging/index.vue'
export default {
	methods:{
    PagingSizeChange(val){
      console.log(`父组件接收到每页: ${val}`);
    },
    PagingCurrentChange(val){
      console.log(`父组件接收到当前页: ${val}`);
    },
	}
}

</script>


效果

在这里插入图片描述

在这里插入图片描述
成功!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue2中,对于element-ui组件的二次封装,可以按照以下步骤进行: 1. 需求分析:明确需要封装element-ui组件,以及需要添加的功能和配置项。 2. 创建父组件:编写父组件的template和script代码,其中template中调用封装组件,script中定义需要传递给封装组件的props属性。 3. 创建封装组件:编写封装组件的template和script代码。在template中使用element-ui组件,并根据需要进行样式和布局的调整。在script中定义props属性,接收父组件传递的值,并监听element-ui组件的事件,触发update事件给父组件。 4. 通过临时变量传递值:由于父组件传递给封装组件的props不能直接作为封装组件的v-model属性传递给element-ui组件,所以需要在封装组件中定义一个临时变量来存储值,并将该变量与element-ui组件进行绑定。 5. 完成打通:在封装组件中监听中间件,接收到element-ui组件的update事件后,再将该事件传递给父组件。 总结来说,Vue2中对于element-ui组件的二次封装,需要创建父组件和封装组件,通过props属性传递值,并在封装组件中监听element-ui组件的事件并触发update事件给父组件。同时,需要使用临时变量来传递值给element-ui组件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3+ts+element-plus 组件的二次封装-- 页脚分页el-pagination的二次封装](https://blog.csdn.net/cs492934056/article/details/128096257)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wh1T3ZzT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值