位置: IT常识 - 正文

Vue使用Element-UI实现分页效果(vue使用计算属性声明在什么配置项中)

编辑:rootadmin
Vue使用Element-UI实现分页效果 前言

推荐整理分享Vue使用Element-UI实现分页效果(vue使用计算属性声明在什么配置项中),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue-element-ui,vue使用什么语言,vue使用腾讯地图,vue使用iframe预览pdf,vue使用iframe预览pdf,vue使用jquery,vue使用jquery,vue使用什么软件开发,内容如对您有帮助,希望把文章链接给更多的朋友!

分页在展示数据列表的场景肯定是非常多的。

一般的项目开发中,数据量特别大,一般都是后端接口直接处理分页返回,前端直接调用即可。

但是前端也是可以不需要借助后端,自己也是可以处理分页的。今天我这个后端开发就站在前端的角度上,处理列表分页。

友情提示:

数据量大的情况下一定要后端处理分页,前端虽然可以实现,但是仅限数据量不是特别大的情况下!

先给大家看下我的列表,一个特别单纯的列表,只是返回一个用户列表,并且根据id倒叙排序。

给大家调用看下吧,一个很简单的结构:

技术选项:Pagination

这里我选择使用的是element-ui的分页:Pagination

它是ElementUI下的一个组件:

它的参数特别重要,我们就是借助这些参数实现的分页

以下案例我只是挑选个别参数,更多参数使用说明相间文档

文档:ElementUI-Pagination 分页

大家根据自己的需求挑选一款即可,挑选不出来心仪可以参考我这一套,我也是精心挑选并且测试了很多参数。

增加分页代码

把这一块加到页面上,就有一个视觉上的分页效果了。

相关代码:

<!-- 分页 --> <!-- @size-change // pageSize 改变时会触发 每页条数 @current-change // currentPage 改变时会触发 当前页 :current-page // 默认false background// 是否为分页按钮添加背景色 :page-sizes // 每页显示个数选择器的选项设置 这是下拉框可以选择的,每选择一行,要展示多少内容 类似:[10, 20, 30, 40, 50, 100] page-sizes=显示当前行的条数 layout // 组件布局,子组件名用逗号分隔 :total // 总条目数,一般从展示列表的总数获取 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" background :page-sizes="[1,3,5,10,20]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="userTableData.length"> </el-pagination>Vue使用Element-UI实现分页效果(vue使用计算属性声明在什么配置项中)

注意代码位置,我是把分页放在table下面了:

初始化数据

紧接着还要定义默认页和默认每页条数,以及数据列表

userTableData我是用过接口返回值赋值的。

data() { return { userTableData: [], // 用户列表 currentPage:1, // 初始页 pagesize:10, // 初始每页的数据 }; },回调函数

然后就是对分页改变做出的回调函数:

逻辑写死即可,函数名需要和上面保持一致,通常直接复制即可。

// 初始页currentPage、初始每页数据数pagesize和数据data handleSizeChange: function (size) { this.pagesize = size; console.log(this.pagesize) //每页下拉显示数据 }, handleCurrentChange: function(currentPage){ this.currentPage = currentPage; console.log(this.currentPage) //点击第几页 },

到了这里你就可以看到列表分页了,但是会发现实际展示的数据和分页展示的不一致,不要着急,就差最后一步了 !

指定table分页

出现上面这种情况,是因为列表的data没有适配分页属性:

你现在的代码肯定是这样的:

最后一步,给要展示的table指定分页以及条件。

一行代码:

:data="userTableData.slice((currentPage-1)*pagesize,currentPage*pagesize)"

查看效果

这样就一个由前端代码实现的分页就完成了。我们检测下吧

初始化页面

因为我默认展示的就是第一页,并且每页展示10条嘛,所以就是这样的:

切换每页条数:

大概就是这样的,大家下去自己研究玩吧。

以下为我这个组件的全部代码,大家灵活cv即可:

<template> <div> <!-- <el-breadcrumb separator="/"> <el-breadcrumb-item><i class="el-icon-date"></i> 数据管理</el-breadcrumb-item> <el-breadcrumb-item>用户列表</el-breadcrumb-item> </el-breadcrumb> --> <el-button type="primary" icon="el-icon-circle-plus" >新增用户</el-button> <!-- 用户列表 --> <!-- data 显示的数据 这里增加了分页功能 highlight-current-row 是否要高亮当前行 默认false border 是否带有纵向边框 默认false stripe 是否为斑马纹 默认false fit 列的宽度是否自撑开默认true cell-style 通过回调函数逻辑操作增加style样式 --> <el-table :data="userTableData.slice((currentPage-1)*pagesize,currentPage*pagesize)" highlight-current-row border stripe fit :cell-style="cellStyle" > <!-- 自定义索引 --> <el-table-column label="序号" type="index" width="50" align="center" :index="indexMethod"></el-table-column> <!-- <el-table-column prop="id" label="id" width="90" align="center"></el-table-column> --> <!-- 用户名 --> <!-- prop 字段值 label 字段名称 width 宽度 align 是否剧中 --> <el-table-column prop="userName" label="姓名" width="80" align="center" ></el-table-column> <!-- 性别 0女1男 --> <el-table-column label="性别" width="50" align="center" prop="sex" heign> <template slot-scope="scope"> <!-- scope.row就是这一行的全部数据 动态判断性别字典 --> {{ scope.row.sex === 0 ? "女" : "男"}} </template> </el-table-column> <!-- <el-table-column prop="account" label="账号" width="150" align="center"></el-table-column> <el-table-column prop="password" label="密码" width="100" align="center"></el-table-column> --> <!-- 头像 --> <el-table-column prop="imnage" label="头像" width="90" align="center"></el-table-column> <!-- 手机号 --> <el-table-column prop="phone" label="手机号" width="150" align="center"> <!-- 给内容增加一个icon图标 --> <template slot-scope="scope"> <i class="el-icon-phone"></i> <span style="margin-left: 10px">{{scope.row.phone}}</span> </template> </el-table-column> <!-- 备注 --> <el-table-column prop="remark" label="备注" width="190" align="center"></el-table-column> <!-- 账号状态 --> <el-table-column label="账号状态" width="80" align="center" prop="status"> <template slot-scope="scope"> {{scope.row.status === 0 ? "正常" : "禁用"}} </template> </el-table-column> <!-- 生日 --> <el-table-column prop="birthday" label="生日" width="200" align="center" sortable> <template slot-scope="scope"> <i class="el-icon-time"></i> <span style="margin-left: 10px">{{scope.row.birthday}}</span> </template> </el-table-column> <!-- 操作列 --> <!-- fixed 列是否固定在左侧或者右侧,true 表示固定在左侧 可选:true, left, right --> <el-table-column fixed="right" label="操作" width="220" align="center" > <template slot-scope="scope"> <!-- scope.row就是这一行的数据 size 尺寸 medium / small / mini type 类型 primary / success / warning / danger / info / text icon 图标类名 --> <el-button @click="handleDelete(scope.row)" type="danger" icon="el-icon-delete" size="small" >删除</el-button> <el-button type="warning" icon="el-icon-edit" size="small">编辑</el-button> </template> </el-table-column> <!-- <el-table-column prop="createTime" label="创建时间" width="180" ></el-table-column> <el-table-column prop="updateTime" label="修改时间" width="180" ></el-table-column> --> </el-table> <!-- 分页 --> <!-- @size-change // pageSize 改变时会触发 每页条数 @current-change // currentPage 改变时会触发 当前页 :current-page // 默认false background// 是否为分页按钮添加背景色 :page-sizes // 每页显示个数选择器的选项设置 这是下拉框可以选择的,每选择一行,要展示多少内容 类似:[10, 20, 30, 40, 50, 100] page-sizes=显示当前行的条数 layout // 组件布局,子组件名用逗号分隔 :total // 总条目数,一般从展示列表的总数获取 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" background :page-sizes="[1,3,5,10,20]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="userTableData.length"> </el-pagination> </div></template><script>// 引入axiosimport axios from "axios";export default { name: "User", data() { return { userTableData: [], // 用户列表 currentPage:1, // 初始页 pagesize:10, // 初始每页的数据 }; }, methods: { // 初始页currentPage、初始每页数据数pagesize和数据data handleSizeChange: function (size) { this.pagesize = size; console.log(this.pagesize) //每页下拉显示数据 }, handleCurrentChange: function(currentPage){ this.currentPage = currentPage; console.log(this.currentPage) //点击第几页 }, //改变表格某一列或者某一个单元格文本颜色 cellStyle({row, column, rowIndex, columnIndex}) { // 定义样式变量 let cellStyle; // 根据每一行的status属性的值进行判断 // 如果是正常就展示以绿色字体展示,如果是禁用就以红色颜色展示 switch(row.status) { // 0代表正常 case 0: // 设置文本颜色 绿色 可以直接写颜色编码,也可以直接写颜色的单词 cellStyle = 'color:#70DB93'; break; // 0代表金禁用 case 1: // 设置文本颜色 红色 cellStyle = 'color:red'; break; // 如果有其他状态,就默认显示,不给文本颜色 default: cellStyle = ''; } //return cellStyle // 返回最终处理过的样式 这样写就是让全部行被style修饰 // 返回最终处理过的样式 只让账号状态这个属性的属性被style修饰 if(column.label == '账号状态'){ return cellStyle } }, // 展示用户列表 queryUserList() { axios.get('http://localhost:9090/user/queryList', { // 传递的参数 params: { } // 回调函数,一定要使用箭头函数,不然this的指向不是vue示例 }).then(res =>{ // 请求成功后的数据返回给用户列表用于展示 this.userTableData = res.data.data; }).catch(error =>{ console.log(error) }) }, // 序列自增 indexMethod(index) { // 每次自增1 可灵活修改 return (index += 1); }, // 删除 handleDelete(row) { // 确认框确认是否要删除 this.$confirm("确定要删除"+row.userName+"吗?", "删除提示", { iconClass: "el-icon-question", //自定义图标样式 confirmButtonText: "残忍删除", //确认按钮文字 cancelButtonText: "留你小命", //取消按钮文字 showClose: true, //是否显示右上角关闭按钮 默认false type: "warning", //提示类型 success/info/warning/error //center:"true", //文字居中 默认false }).then(res=> { //选择确认按钮进入此方法 //确认操作 请求删除接口 axios.get('http://localhost:9090/user/delete', { // 传递的参数 params: { id:row.id //id,从row获取当前行的用户id } // 回调函数,一定要使用箭头函数,不然this的指向不是vue示例 }).then(res =>{ // 删除成功 if(res.data.status===200){ // 删除成功提示 this.$message({showClose: true, message: '删除成功!',type: 'success', duration:1000,center:true}); // 重新刷新最新的用户列表 this.queryUserList(); } }).catch(error =>{ console.log(error) }) }).catch(() => { //选择取消按钮进入此方法 //取消操作 }); } // 打开新增用户的弹窗 // open() { // this.$alert('这是一段内容', '标题名称', { // confirmButtonText: '确定', // callback: action => { // this.$message({ // type: 'info', // message: `action: ${ action }` // }); // } // }); // }, }, mounted() { // 页面加载就渲染用户列表 this.queryUserList(); },};</script><style ></style>总结

感觉elementui对分页组件做的特别好。使用起来也特别简单,这样我不管从前后端哪个维度,都可以实现分页了,又多学了一个技能,如果这篇文章对你有用,那就是对我最大的支持!

本文链接地址:https://www.jiuchutong.com/zhishi/300251.html 转载请保留说明!

上一篇:【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)(qt opencv ffmpeg)

下一篇:终于见识到 Python 的天花板。。(终于见识到什么叫云横秦岭了)

  • 荣耀畅玩20是4G还是5G(荣耀畅玩20是华为手机吗)

    荣耀畅玩20是4G还是5G(荣耀畅玩20是华为手机吗)

  • 小爱同学如何连接wifi(小爱同学如何连接手机蓝牙)

    小爱同学如何连接wifi(小爱同学如何连接手机蓝牙)

  • 微信被别人登录会有提醒吗(微信被别人登录了自己登不上怎么办)

    微信被别人登录会有提醒吗(微信被别人登录了自己登不上怎么办)

  • 华为荣耀20Pro屏幕点不动(华为荣耀20pro屏幕尺寸)

    华为荣耀20Pro屏幕点不动(华为荣耀20pro屏幕尺寸)

  • QQ里的mafu表情包叫什么(qq马表情如何打出来)

    QQ里的mafu表情包叫什么(qq马表情如何打出来)

  • 华为手机微信夜间模式怎么改(华为手机微信夜间免打扰模式怎么设置)

    华为手机微信夜间模式怎么改(华为手机微信夜间免打扰模式怎么设置)

  • iphone11无线充电失效(iphone11无线充电在哪个位置)

    iphone11无线充电失效(iphone11无线充电在哪个位置)

  • xsmax颜色有哪些(xsmax颜色有哪些照片)

    xsmax颜色有哪些(xsmax颜色有哪些照片)

  • 荣耀手机有没有扫描功能(荣耀手机有没有红外线遥控功能)

    荣耀手机有没有扫描功能(荣耀手机有没有红外线遥控功能)

  • 微信搜不到对方是拉黑了吗(微信搜不到对方手机号码是拉黑了吗)

    微信搜不到对方是拉黑了吗(微信搜不到对方手机号码是拉黑了吗)

  • 苹果11pro max充电85%就充不进去怎么回事(苹果11promax充电发烫怎么回事)

    苹果11pro max充电85%就充不进去怎么回事(苹果11promax充电发烫怎么回事)

  • 电脑屏幕壁纸如何设置(电脑屏幕壁纸如何锁定)

    电脑屏幕壁纸如何设置(电脑屏幕壁纸如何锁定)

  • word文档怎么排版页面(word文档怎么排序名次1234)

    word文档怎么排版页面(word文档怎么排序名次1234)

  • 荣耀手环3按键怎么设置(荣耀手环按键按不动)

    荣耀手环3按键怎么设置(荣耀手环按键按不动)

  • 小米9pro5g是双模吗(小米9pro5g单模)

    小米9pro5g是双模吗(小米9pro5g单模)

  • 如何知道抖音的微信号(如何知道抖音的发布时间)

    如何知道抖音的微信号(如何知道抖音的发布时间)

  • 幻灯片的版式是什么(幻灯片的版式是指视图的预览模式)

    幻灯片的版式是什么(幻灯片的版式是指视图的预览模式)

  • 数据收集的方法(数据收集的方法只有一种)

    数据收集的方法(数据收集的方法只有一种)

  • 微信第一次帮封可以自动解除吗(微信第一次封怎么解)

    微信第一次帮封可以自动解除吗(微信第一次封怎么解)

  • qq被好友屏蔽了还可以看对方的空间吗(qq被好友屏蔽了还能发出去消息吗)

    qq被好友屏蔽了还可以看对方的空间吗(qq被好友屏蔽了还能发出去消息吗)

  • 苹果手机微信怎么解绑手机号(苹果手机微信怎么双开)

    苹果手机微信怎么解绑手机号(苹果手机微信怎么双开)

  • aux1是什么意思啊(auxr是什么意思啊)

    aux1是什么意思啊(auxr是什么意思啊)

  • 电池容量和额定容量(电池容量和额定功率)

    电池容量和额定容量(电池容量和额定功率)

  • 王者荣耀中孙膑怎么出装?(王者荣耀中孙膑是男的女的)

    王者荣耀中孙膑怎么出装?(王者荣耀中孙膑是男的女的)

  • vue修改 el-input 输入框默认背景色(vue修改打包后静态资源路径的修改)

    vue修改 el-input 输入框默认背景色(vue修改打包后静态资源路径的修改)

  • gozilla.exe是什么进程 作用是什么 gozilla进程查询(go dll)

    gozilla.exe是什么进程 作用是什么 gozilla进程查询(go dll)

  • 【chatgpt】chatgpt使用Api教程不使用科学方法(chat top)

    【chatgpt】chatgpt使用Api教程不使用科学方法(chat top)

  • 增值税发票丢失可以用复印件入账么
  • 营改增后纳税人可以使用的发票种类有
  • 小规模纳税人租金发票开几个点
  • 扫微信送礼品是诈骗吗
  • 税务注销交什么税
  • 购货发票属于什么科目
  • 计提坏账准备和冲减坏账准备
  • 公司租用办公室需要交房产税吗
  • 调整增值税误差的原因
  • 物业公司临时工的工资可以进成本吗
  • 持有的汇票到期后怎么办
  • 外贸企业人民币结算
  • 增值税纳税申报表怎么填
  • 建筑劳务增值税
  • 关于增值税报税的通知
  • 资产减值准备的账务处理
  • 工程已完工又发生了成本怎么处理
  • 发票过期未认证可以用吗
  • 企业所得税减免政策
  • 做账计入收入没有结转成本怎么做账?
  • 房地产土地增值税加计扣除20%
  • 总公司和分公司的合作协议
  • 银行审计费
  • 进口的增值税票能抵扣吗
  • 银行存款转定期存款分录
  • 委托加工物资如何转入生产成本
  • 业务招待费能不能计入销售费用
  • 企业所得税季度预缴是什么意思
  • 应收账款净额可以是负数吗
  • 多品种生产能力计算公式
  • 季度所得税表中营业收入填万元还是总金额
  • vue2转vue3工具
  • 工会经费和残保金怎么做账
  • anaconda卸载干净
  • 工作服计入什么明细科目
  • 总公司与分公司怎么报税
  • 服装制造行业成本占比
  • 哪些企业可以开13点税票
  • 日常费用报销表格
  • 产品结转基本步骤有哪些
  • mongodb用户权限
  • 一般户可以付款吗
  • 所得税汇算清缴怎么操作
  • 清税证明怎么在网上申请
  • 工会账以固定资产投资
  • 公司清算的特征
  • win10下安装win7启动不了
  • 注册资本认缴到期
  • 什么各级工会的离休退休人员的待遇
  • 困难企业社保费返还
  • 社保缴费基数如何核定
  • 办公室用茶叶怎么入账
  • 五险一金缴纳比例2023
  • 配电箱安装步骤及要求
  • 取得普通发票怎么做账
  • 固定资产报废电费怎么算
  • 应收账款管理办法
  • mysqld占用cpu高
  • ubuntu的终端在哪
  • Mac如何更换壁纸
  • linux 删除文件夹里的所有文件
  • win8如何关闭开始屏幕
  • macbookpro如何语音输入
  • linux修改分组
  • win7系统摄像头不可用怎么办
  • RedHatLinux AS3中APACHE+SendMail+OpenWebMail整合
  • JavaScript中的方法名不区分大小写
  • unity3d怎样导入资源
  • js瀑布流布局
  • node.js异步编程
  • unity 2d 3d混合
  • 关于草丛:单局游戏内
  • 安卓开发常用代码
  • 说一说我下乡插队时的那点事
  • Python for Informatics 第11章 正则表达式(一)
  • 河北农信登录密码错误
  • ca登陆
  • 如何查看税务登记记号
  • 酒店不给住怎么办
  • 普通发票开具时写材料一批需要附什么清单?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设