前端案例:基于el-table和el-pagination实现数据的分页效果

举报
敬 之 发表于 2022/04/14 01:31:39 2022/04/14
【摘要】         首先使用 el-table(表格) 和 el-pagination(分页) 组件需要 npm 下载 Element UI 组件库,下载安装方式参见官网:Element - The world's most popular Vue U...

        首先使用 el-table(表格) 和 el-pagination(分页) 组件需要 npm 下载 Element UI 组件库,下载安装方式参见官网:Element - The world's most popular Vue UI frameworkElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.eleme.cn/#/zh-CN/component/installation

目录

一、案例效果

二、实现步骤&涉及要点

1. el-table 表格存放数据

2. el-pagination 设置分页效果

三、完整代码+详细注释


一、案例效果

(14 条数据每页显示 6 条,共 3 页。)

二、实现步骤&涉及要点

1. el-table 表格存放数据


  
  1. <el-table :data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" stripe
  2. style="width: 100%">
  3. <el-table-column prop="date" label="日期" width="220" align="center"></el-table-column>
  4. <el-table-column prop="name" label="姓名" width="220" align="center"></el-table-column>
  5. <el-table-column prop="job" label="职业" width="220" align="center"></el-table-column>
  6. <el-table-column prop="address" label="地址" align="center"></el-table-column>
  7. </el-table>
参数 说明
data 显示的数据
stripe 是否以斑马纹显示
prop 对应列内容的字段名,也可以使用 property 属性
label 显示的标题

注意此处在选择要显示的数据时也需要对其进行截取操作,否则会直接全部显示。我们使用的是 slice(start,end) 截取数组,其中不包括 end;

:data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)"
 

每页数据量 pageSize 为 6, currentPage 为当前页;比如第一页,那么截取的就是 0 ~ 6,slice 返回的是数组副本,所以这个 0 ~ 6 代表下标,就有七条数据,去掉下标为 6 的数据,即为 6 条;后面依次...

2. el-pagination 设置分页效果


  
  1. <el-pagination
  2. background
  3. layout="prev, pager, next,jumper, ->, total, slot"
  4. :total="tableData.length"
  5. @current-change="handleCurrentChange"
  6. :current-page="currentPage"
  7. :page-size="pageSize"
  8. style="text-align: center">
  9. </el-pagination>
参数 说明
background 是否为分页按钮添加背景色
layout

组件布局,子组件名用逗号分隔;prev(上一页按钮)、pager(页码)、nex(下一页按钮)、jumper(跳转)、->(空格)、total(数据总条目数)

current-change currentPage 改变时会触发
current-page 当前页数
page-sizes 每页显示个数选择器的选项设置

三、完整代码+详细注释


  
  1. <template>
  2. <div>
  3. <div class="paging">
  4. <!--数据显示区域-->
  5. <div class="data">
  6. <!--表格存放数组中的数据,并对数据进行截取,以控制每一页显示的数据量-->
  7. <!--slice(start,end) 不包括end-->
  8. <el-table :data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" stripe
  9. style="width: 100%">
  10. <el-table-column prop="date" label="日期" width="220" align="center"></el-table-column>
  11. <el-table-column prop="name" label="姓名" width="220" align="center"></el-table-column>
  12. <el-table-column prop="job" label="职业" width="220" align="center"></el-table-column>
  13. <el-table-column prop="address" label="地址" align="center"></el-table-column>
  14. </el-table>
  15. </div>
  16. <!--分页按钮-->
  17. <el-pagination
  18. background
  19. layout="prev, pager, next,jumper, ->, total"
  20. :total="tableData.length"
  21. @current-change="handleCurrentChange"
  22. :current-page="currentPage"
  23. :page-size="pageSize"
  24. style="text-align: center">
  25. </el-pagination>
  26. </div>
  27. </div>
  28. </template>
  29. <script>
  30. export default {
  31. name: "fenye.vue",
  32. data() {
  33. return {
  34. currentPage: '1', //当前页 刷新后默认显示第一页
  35. pageSize: '6', //每一页显示的数据量 此处每页显示6条数据
  36. //假数据
  37. tableData: [
  38. {
  39. date: '2016-05-02',
  40. name: '橘右京',
  41. job: '刺客',
  42. address: '上海市普陀区金沙江路 1518'
  43. },
  44. {
  45. date: '2016-05-03',
  46. name: '娜可露露',
  47. job: '刺客',
  48. address: '上海市普陀区金沙江路 1517'
  49. },
  50. {
  51. date: '2016-05-04',
  52. name: '鲁班七号',
  53. job: '射手',
  54. address: '上海市普陀区金沙江路 1519'
  55. },
  56. {
  57. date: '2016-05-05',
  58. name: '云中君',
  59. job: '刺客',
  60. address: '上海市普陀区金沙江路 1516'
  61. },
  62. {
  63. date: '2016-05-06',
  64. name: '干将莫邪',
  65. job: '法师',
  66. address: '上海市普陀区金沙江路 1516'
  67. },
  68. {
  69. date: '2016-05-07',
  70. name: '不知火舞',
  71. job: '法师',
  72. address: '上海市普陀区金沙江路 1516'
  73. },
  74. {
  75. date: '2016-05-08',
  76. name: '沈梦溪',
  77. job: '法师',
  78. address: '上海市普陀区金沙江路 1516'
  79. },
  80. {
  81. date: '2016-05-09',
  82. name: '百里守约',
  83. job: '刺客',
  84. address: '上海市普陀区金沙江路 1516'
  85. },
  86. {
  87. date: '2016-05-10',
  88. name: '马可波罗',
  89. job: '射手',
  90. address: '上海市普陀区金沙江路 1516'
  91. },
  92. {
  93. date: '2016-05-11',
  94. name: '孙尚香',
  95. job: '射手',
  96. address: '上海市普陀区金沙江路 1516'
  97. },
  98. {
  99. date: '2016-05-12',
  100. name: '赵云',
  101. job: '刺客',
  102. address: '上海市普陀区金沙江路 1516'
  103. },
  104. {
  105. date: '2016-05-13',
  106. name: '钟无艳',
  107. job: '战士',
  108. address: '上海市普陀区金沙江路 1516'
  109. },
  110. {
  111. date: '2016-05-14',
  112. name: '杨玉环',
  113. job: '法师',
  114. address: '上海市普陀区金沙江路 1516'
  115. },
  116. {
  117. date: '2016-05-15',
  118. name: '鲁班大师',
  119. job: '辅助',
  120. address: '上海市普陀区金沙江路 1516'
  121. },
  122. ],
  123. }
  124. },
  125. methods: {
  126. //点击按钮切换页面
  127. handleCurrentChange(currentPage) {
  128. this.currentPage = currentPage; //每次点击分页按钮,当前页发生变化
  129. // console.log(this.currentPage);
  130. },
  131. },
  132. mounted() {
  133. }
  134. }
  135. </script>
  136. <style scoped>
  137. .paging {
  138. width: 1000px;
  139. height: 500px;
  140. margin: 100px auto;
  141. }
  142. .data {
  143. width: 98%;
  144. height: 340px;
  145. border: 2px solid #cccccc;
  146. margin: 10px auto;
  147. text-align: center;
  148. }
  149. </style>

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/122616710

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。