前言

当我们在开发 web 应用时,经常需要对大量数据进行分页展示,这时候用到的就是分页器。element 是一款流行的前端 ui 框架,它提供了许多有用的工具和组件,其中就包括分页器组件。在本文中,我们将学习如何使用 vue 基于 element 封装一个简单易用的分页器组件,以方便我们在开发中快速应用。


实现思路

1、用到的参数

pageNum: 1 默认第几页
pageSize: 10 一页展示几条
total: 0 总条数

2、用到的事件方法

@size-change="sizeChange" 每页展示几条数据,改变时触发
@current-change="currentChange" 页码变化触发
:page-sizes="[5, 10, 15, 20]" 每页显示个数选择器的选项设置
layout="total, sizes, prev, pager, next, jumper" 组件布局,子组件名用逗号分隔
:current-page.sync="pageNum" 当前页数,支持 .sync 修饰符
:page-size="pageSize" 每页显示条目个数,支持 .sync 修饰符

3、数据传递的方法

props 父传子
$emit 子传父

4、实现过程

  1. 首先定义一个子组件页面用来封装分页,我这边直接用的 element 的分页组件;
  2. 在父组件中(使用的页面)引入封装组件(子组件)并注册,然后在页面中使用,在父组件中给标签(注册的组件名)上绑定一个属性, 属性上挂载需要传递的值,通过 props 在子组件(封装文件)接收数据;
  3. 在子组件中自定义一个事件,调用这个事件后,子组件通过 this.$emit('自定义事件名',要传递的数据) 发送父组件可以监听的数据,最后父组件监听子组件事件,调用事件并接收传递过来的数据。

代码详解

封装文件 /src/components/paging/index.vue

<template><div><!-- //分页器封装文件 --><el-pagination v-if='total > 0' @size-change="sizeChange" @current-change="currentChange" :page-size="pageSize"layout="total, sizes, prev, pager, next, jumper" :current-page.sync="pageNum" :page-size="pageSize":total="total"></el-pagination></div>
</template><script>export default {name: "Paging",data() {return {pageNum: 1, //当前页数为第一页pageSizes: [5, 10, 15, 20], //每页显示多少条};},//子组件接收父组件的值props: {total: {//总数据条数required: false, //是否必填default: 0, //默认值为0},pageSize: {required: false, //是否必填default: 10, //默认显示10条},},watch: {//监听页数变化pageNum(val, index) {if (typeof val === "number") {this.pageNum = val;}},},// 事件方法methods: {// 每页展示几条变化sizeChange(val) {//子组件向父组件传值this.$emit("sizeChange", val);},// 页码变化currentChange(val) {//子组件向父组件传值this.$emit("currentChange", val);},},};
</script>

使用文件 /src/views/netelement/index.vue

<template><div><!-- //表格 --><div class="tableBox"><el-table :data="tableData" stripe border><el-table-column type="index" width="50"></el-table-column><el-table-column prop="name" label="名称"></el-table-column><el-table-column prop="id" label="id"></el-table-column><el-table-column prop="createtime" label="编号"></el-table-column><el-table-column prop="desc" label="备注"></el-table-column><el-table-column prop="updatetime" label="电话号码"></el-table-column></el-table></div><!-- //分页器 --><div v-show="total>0" class="pagingBox"><Paging :pageNum="gather.pageNum" :total="total" :pageSize="gather.pageSize"@sizeChange="sizeChange" @currentChange="currentChange" /></div></div>
</template>
<script>import {getFactoryListAsync} from "@/api/commonRequest.js"; //引入接口文件import Paging from "@/components/paging/index.vue"; //引入封装的分页器文件export default {data() {return {tableData: [], //表格数据total: 0, //数据总条数gather: {pageNum: 1,//默认第一页pageSize: 10,//一页展示10条}};},components: { //一定要注册组件Paging},mounted() {this.getFactoryListAsync() //定义一个方法调用},methods: {// 调用方法getFactoryListAsync() {// 接口方法getFactoryListAsync(this.gather).then(res => {if (res.code == '1000') {// 赋值操作this.tableData = res.data.rowsthis.total = res.data.total}})},// 点击页码及上一页下一页按钮操作currentChange(val) {this.gather.pageNum = val;this.getFactoryListAsync(); //调用接口方法},//每页展示几条按钮操作sizeChange(val) {this.gather.pageSize = val;this.getFactoryListAsync(); //调用接口方法},},};</script>
<style scoped>.tableBox {margin-bottom: 20px;}.pagingBox {text-align: right;}</style>

实现效果

至此,有关于分页器的封装就结束啦。当然,移动端和小程序也是可以封装一些公共组件的,下面几篇文章有详细讲解,感兴趣的同学可以去了解一下。

移动端时间封装、移动端导航栏封装(vant)、小程序日期选择器封装

用vue封装分页器,让你的页面简单而不失优雅相关推荐

  1. Vue封装下拉框组件时,为document绑定原生事件addEventlistener(click“),切换页面之后事件还未被摧毁...

    1 <script> 2 export default { 3 props: ["lists"], 4 data() { 5 return { 6 isactive: ...

  2. axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  3. 普歌-Vue 封装防刷新考试倒计时组

    date.vue <!-- 定时器组件 --> <template><div class=""><p>{{ count }}< ...

  4. vue封装自定义数字键盘组件

    最近在公司做一个项目,简单来说就是web端微信公众号上的一个申请表单页面,随便如个图 环境: vue框架 + vant组件库 + 其它(这里用不上的,不说) 具体如图: 都知道,input输入框如果不 ...

  5. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  6. [vue] 说说你对SPA单页面的理解,它的优缺点分别是什么?

    [vue] 说说你对SPA单页面的理解,它的优缺点分别是什么? 介绍:SPA应用就是一个web应用,可理解为:是一种只需要将单个页面加载到服务器之中的web应用程序.当浏览器向服务器发出第一个请求时, ...

  7. [vue-cli]在使用vue-cli开发vue项目时,自动刷新页面的原理你了解吗?

    [vue-cli]在使用vue-cli开发vue项目时,自动刷新页面的原理你了解吗? 自动刷新页面并不是vue-cli的功能,而是webpack的hot-module-replacement-plug ...

  8. 多个html如何套用套一个头部,Vue.js项目中管理每个页面的头部标签的两种方法...

    在 Vue SPA 应用中,如果想要修改 HTML 的头部标签,如页面的 title ,我们只能去修改 index.html 模板文件,但是这个是全局的修改,如何为每个页面都设置不一样的 title ...

  9. vue路由,解决同一路由页面多次触发不刷新页面【vue开发】

    vue路由,解决同一路由页面多次触发不刷新页面[vue开发] vue路由的机制是这样的: 不同的路由vue会刷新并跳转到相应路由,但如果是下一个点击触发的还是当前路由则当前路由页面不会被刷新 要解决的 ...

最新文章

  1. Redux 入门教程(二):中间件与异步操作
  2. 自动跟随小车c语言,基于OpenCV的智能小车运动轨迹跟踪方法研究
  3. 约瑟夫问题(优化优化再优化)
  4. Xstudio+Bugzilla
  5. WORD页边距、行距、页码、页眉页脚
  6. SQL Cookbook:一、检索记录(13)按模式搜索
  7. 【Cocos2d-x for WP8 学习整理】(2)Cocos2d-Html5 游戏 《Fruit Attack》 WP8移植版 开源...
  8. 多元线性回归分析matlab实验报告,利用MATLAB进行多元线性回归.ppt
  9. Angular实现dialog对话框封装
  10. java 类型 装箱和拆箱
  11. 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)
  12. python制作微信聊天机器人:10行代码让你秒变撩妹达人
  13. Android电池信息的获取
  14. 跑步用挂脖耳机好还是无线耳机、公认最好的跑步耳机推荐
  15. MAC 权限Permission denied XXX
  16. 选择“正激”还是“反激”?这份宝典请收好~
  17. Web前端系列技术之HTML基础(从入门开始)①
  18. 大数据技术之Canal入门篇
  19. 【Tkinter】终于把StringVar讲明白了
  20. MySQL数据操作与查询笔记 • 【第7章 连接查询】

热门文章

  1. c语言输入一串字符统计各字母出现次数,统计输入字符各个字母出现频率的解题思路...
  2. 电容式液晶屏可实现多点触控
  3. 卡巴斯基和Endtab.org开设新课程教授用户如何防范人肉搜索
  4. Android项目实战:账本APP开发
  5. Git入门基础-Chivalrous-专题视频课程
  6. 如何在openlayers中使用iconfont或font Awesome字体图标
  7. 联合证券|滴滴出行即日起恢复!A股嗨了!券商扛起领涨大旗
  8. 阳光直射对计算机有影响吗,办公电脑需要注意的风水
  9. 让图片说出声音来(利用讯飞API实现图片转文字和文字转语音)
  10. CSS好看的一些颜色