基于vue+element 分页的封装

目录标题

项目场景:

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


认识分页

这是一段普通分页的示例

javascript 复制代码
<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

javascript 复制代码
:current-page="currentPage"

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

2.page-sizes

javascript 复制代码
:page-sizes="[100, 200, 300, 400]"

用于设置分页每页显示多少条,主要效果如下:

3.page-size

javascript 复制代码
:page-size="100"

设置默认显示多少条(这里默认为100条),主要效果如下:

4.layout

javascript 复制代码
layout="total, sizes, prev, pager, next, jumper"

用于设置组件布局,子组件名用逗号分隔,效果如下:

字段说明:

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

5.total

javascript 复制代码
:total="400"

展示总页数,效果如下。

6.size-change

javascript 复制代码
@size-change="handleSizeChange"

触发事件,当page-size改变时触发,也就是当页面改变时触发。

7.current-change

javascript 复制代码
@current-change="handleCurrentChange"

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


封装分页:

弄清楚每个字段的意思后便可以进行封装了。

主要思路是,封装的组件通过父组件将currentPage,total,sizes,pager,jumper传入,并且在触发@size-change,@current-change事件时,将事件信息传给父组件。

创建paging:

进行封装

javascript 复制代码
<!-- 
	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>

封装完成!


页面中使用:

引入

javascript 复制代码
<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>

效果

成功!

相关推荐
fanruitian14 分钟前
uniapp android开发 测试板本与发行版本
前端·javascript·uni-app
rayufo17 分钟前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk21 分钟前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
摘星编程1 小时前
React Native + OpenHarmony:Timeline垂直时间轴
javascript·react native·react.js
2501_944525542 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
jin1233222 小时前
React Native鸿蒙跨平台完成剧本杀组队详情页面,可以复用桌游、团建、赛事等各类组队详情页开发
javascript·react native·react.js·ecmascript·harmonyos
李白你好2 小时前
Burp Suite插件用于自动检测Web应用程序中的未授权访问漏洞
前端
经年未远3 小时前
vue3中实现耳机和扬声器切换方案
javascript·学习·vue
刘一说4 小时前
Vue 组件不必要的重新渲染问题解析:为什么子组件总在“无故”刷新?
前端·javascript·vue.js
可触的未来,发芽的智生4 小时前
狂想:为AGI代称造字ta,《第三类智慧存在,神的赐名》
javascript·人工智能·python·神经网络·程序人生