分页组件的基本使用

一: element组件库查找 - pagination

二: 基本使用:

  1. <template>
  2. <div>
  3. <el-pagination
  4. :page-size="size" // 每页显示几条 *
  5. :total="1000" // 设置数据的总条数 *
  6. layout="prev, pager, next"
  7. >
  8. </el-pagination>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. data() {
  14. return {
  15. // 这里的数据是根据后端来确定的
  16. total: 0,
  17. page: 1, // 当前在第几页
  18. size: 2 // 每页有多少条数据
  19. }
  20. },
  21. methods: {
  22. // 改变当前页 (会自动传入一个页码,)
  23. pageChange(page) {
  24. console.log(page)
  25. },
  26. }
  27. }
  28. </script>

三. 分页组件以及它的事件:

常见的几种绑定在分页上的:

1. layout中的关键字有自己的含义;

2. total用来设置数据的总条数 :total = total

3. : page-size = xxx 每页显示几条 绑定的是data里面的每页几条的数据


事件1: 改变每页有几条数据 [每页2条,5条,10条]

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624898094778-88a5c106-9f16-475d-a9f0-a03a8ea9b3c6.png#clientId=u7fe589ea-7f4b-4&from=paste&height=173&id=ubb5a2242&margin=%5Bobject%20Object%5D&name=image.png&originHeight=173&originWidth=418&originalType=binary&ratio=1&size=10437&status=done&style=none&taskId=u5f73093f-1504-4d0f-8dcd-391dde17f30&width=418)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624898132181-c4b694a1-cc43-4211-8c20-b6bab93a1e4f.png#clientId=u7fe589ea-7f4b-4&from=paste&height=103&id=u4a59f5a3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=103&originWidth=618&originalType=binary&ratio=1&size=10841&status=done&style=none&taskId=u575f1678-418a-41e5-aae0-f636ad21969&width=618)

事件2: 点击切换页码

分析思路:

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624900197214-c0bf0c28-9f79-43ee-9d1e-53c3eae52f04.png#clientId=u7fe589ea-7f4b-4&from=paste&height=47&id=ue5681d21&margin=%5Bobject%20Object%5D&name=image.png&originHeight=47&originWidth=276&originalType=binary&ratio=1&size=4174&status=done&style=none&taskId=u85485eee-1b26-44f3-8528-c26a712ada8&width=276)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624900204553-7a421796-1373-4ba3-99d0-adf59bbbbad4.png#clientId=u7fe589ea-7f4b-4&from=paste&height=280&id=uea0e0718&margin=%5Bobject%20Object%5D&name=image.png&originHeight=280&originWidth=331&originalType=binary&ratio=1&size=40711&status=done&style=none&taskId=ub357973a-d542-4b6a-8288-e1944215d3b&width=331)

自动接收当前的页码(也就是说 当用户切换了页码,会自动跳转到当前页,)

1.分页上绑定

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624898717332-53e8c932-8bda-476e-ac09-7b15a4acebd5.png#clientId=u7fe589ea-7f4b-4&from=paste&height=174&id=ub02e4a0b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=174&originWidth=393&originalType=binary&ratio=1&size=10153&status=done&style=none&taskId=u372ec4e2-cb6f-428c-9ab6-700e178bd71&width=393)

2.在method里面写事件

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624898726135-0388dae7-3526-4149-a72c-0fc57feda1de.png#clientId=u7fe589ea-7f4b-4&from=paste&height=102&id=ue88f0da0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=102&originWidth=216&originalType=binary&ratio=1&size=4577&status=done&style=none&taskId=u28569d61-c1d2-436e-8670-86112154c43&width=216)

3.切换页码的运行逻辑

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624899743090-f1764686-674e-4958-9b6b-c2bfac67e8bc.png#clientId=u7fe589ea-7f4b-4&from=paste&height=397&id=ud251a1a9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=397&originWidth=601&originalType=binary&ratio=1&size=107209&status=done&style=none&taskId=ud09cface-a30f-4d97-b67f-d0673e880d5&width=601)<br />

四: 删除的分页异常处理

1. 问题所在:

如果删除最后一页的最一条数据之后,页面会显示不正常

2.原因:

如果删除第最后一页(假设是第4页)的最一条数据之后,再发请求,还是求的第4页,

而此时,后端已经求不到第4 页的数据了(被删除了)。

3.思路

在删除成功之,去检测一下,是否当前删除的是当前页最后一条数据,如果是,就把页

码-1,再发请求

1.封装删除api

2.提示是否确定删除

3.重发请求

4.步骤:

data中定义的 :

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624902517580-94376443-a39a-4a41-9020-284baf9eadb2.png#clientId=u7fe589ea-7f4b-4&from=paste&height=97&id=uf8fadf60&margin=%5Bobject%20Object%5D&name=image.png&originHeight=97&originWidth=331&originalType=binary&ratio=1&size=4895&status=done&style=none&taskId=ucdef10d4-f39e-4fb4-a721-20fffe628a2&width=331)

弹出确定删除吗?

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624902619310-0cc627e5-b8d6-47e5-bca8-771a8e57ed96.png#clientId=u7fe589ea-7f4b-4&from=paste&height=316&id=u34b3d12b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=316&originWidth=269&originalType=binary&ratio=1&size=14902&status=done&style=none&taskId=u102f8e88-a683-4721-9e87-5d9ceb5813e&width=269)

删除请求 (删除异常处理!!!!!!!)

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624902645340-8db71aa9-4967-4070-9df3-b26028e2ed9d.png#clientId=u7fe589ea-7f4b-4&from=paste&height=368&id=ua52bcdf7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=368&originWidth=319&originalType=binary&ratio=1&size=19940&status=done&style=none&taskId=u99805021-525b-43a6-9c43-ecf101b45ab&width=319)

五: 添加时页面跳转不正确

1. 问题:

比如我在第3页添加角色,然后我设置的又是每页两条数据,按理来说我添加好了就应该跳到最

后一页去,但是我还是在第3页

2.分析:

添加完数据以后,若是最后一页没有满,就不会跳到下一页,但是如果最后一页满了,就跳到下一页

3.思路:

a) 先计算出表格中的最大页码,,然后再计算出表格的最后一页有没有满

b) 在判断的时候,如最后一页是满的,就让当前页数等于最大页数并且+1 , 如果当前页数不满,就只

用让当前页数等于最大页数就行了

1. 计算属性

  1. computed: {
  2. // 表格中最大的页码
  3. maxNum() {
  4. return Math.ceil(this.total / this.pageParams.pageSize) // pageSize根据data中定义的
  5. },
  6. // 最后一页是不是满的
  7. isLastPageFulled: function() {
  8. return this.total % this.pageParams.pageSize === 0
  9. }
  10. },

2.修改doAdd()这个请求

  1. async doAdd() {
  2. try {
  3. // 1. 调用接口
  4. const res = await addRole(this.form)
  5. // 2. 关闭弹层
  6. this.showDialog = false
  7. // if(表格的最后一页是满) {
  8. // 想查看最新添加的数据,要跳到最大页码的下一页
  9. // }
  10. if (this.isLastPageFulled) {
  11. this.pageParams.page = this.maxNum + 1
  12. } else {
  13. // 想查看最新添加的数据,要跳到最大页码
  14. this.pageParams.page = this.maxNum
  15. }
  16. // if (this.isLastPage && this.roles.length === this.pageParams.pageSize) {
  17. // this.pageParams.page++
  18. // // 页码++
  19. // }
  20. // 3. 重发请求
  21. this.loadRoles()
  22. console.log(res)
  23. } catch (err) {
  24. console.log(err)
  25. }
  26. },

3.在分页中

即使上面做了处理,添加完以后就会跳转到最后一页,,但是页码的高亮还是停留在原来位置,

这个时候就需要加下面这个属性了,这个属性是页码高亮

image.png
image.png image.png

这里说明一下:

:current-page=”curPage” 这个属性是官网上提供的,为什么要在data中定义curPage呢?

是因为官网上说了,,要求是Number类型的,,本应该直接绑定pageParams.page的,但是他是字符串,所

以在获取角色列表的时候,就需要把page赋值给curPage这个变量,然后在事件中绑定这个curPage

六: 解决分页序号不连续的bug

1. bug:

就是页数不都是12345…这样连续的吗? 但是这个bug就是如果一页只有3条,翻到下一页就应

该是456,但是下一页又从123开始了,

2. 解决:

公式:

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21762447/1624976513043-cb1f663b-75f4-49cb-b151-3ee5184f4736.png#clientId=udc01f463-a11c-4&from=paste&height=159&id=u0b2a23c8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=159&originWidth=495&originalType=binary&ratio=1&size=27321&status=done&style=none&taskId=uc199d6a0-02b5-46f9-b422-e8e40c8fc68&width=495)

3. 代码解决:

  1. :index="indexMethod" // 在分页上面加
  1. indexMethod(index) {
  2. // (0 + 1) + (2 - 1 )* 2 == 3
  3. return index = (index + 1) + (this.pageParams.page - 1) * this.pageParams.pagesize
  4. },
  5. // pageParams.page 和 pageParams.pagesize
  6. // 是data中定义的(一个是当前的页码,一个是每页有几条)