Vue 3下element ui分页功能异常的解决

Pagination 分页

先不卖关子,直接上解决方案:

1、换页获取数据是异步操作,所以用async…await…

2、不要被官方的要监听误导!!!

下面描述一下我遇到的问题:

分页效果
这是element ui最基础的分页组件,current-page这个参数就是当前页数,支持 v-model 双向绑定。代码如下:

<el-pagination 
class="pages"
v-model:currentPage="currentPage" 
:page-size="10" 
layout="total, prev, pager, next" 
:total="total" 
@current-change="handleCurrentPage" 
/>

 data() {
      return {
        // 表格数据
        tableData: [],
        total: 0,
        currentPage:0,
      };
   },

methods: {
	 handleCurrentPage(val) {
        console.log(val);
     }
},

执行上述代码,ok,一点问题没有。
但是,一旦我们对handleCurrentPage加入数据请求,
奇怪的事情就发生了:我们点击分页,表格里的数据确实发生了改变。不确定?那咱们再console.log()看一下,确实page发生着变化,但是当前的页码,它就始终停在1不动啊!回去看看代码:

 handleCurrentPage(val) {
        console.log(val);
        let that = this;
        that.tableData = [];
        that.total = 0;
        that.currentPage=val;// 更新双向绑定的currentPage
        let url = "your url" + val;
        // console.log(url);
         that.request(url, {}, "GET", {}).then((res) => {
          console.log(res.data);
          that.total = res.data.count;
          for (let i = 0; i < res.data.data.length; i++) {
            let obj = {};
            obj.index = i + 1;
            obj.id = res.data.data[i].id;
            obj.name = res.data.data[i].name;
            obj.score = res.data.data[i].score;
            obj.counter = res.data.data[i].counter;
            that.tableData.push(obj);
          }
          this.$message({
            message: "数据已更新",
            type: "success",
          })
        }).catch((res) => {
          console.log(res);
          this.$message({
            message: "数据请求失败",
            type: "error",
          })
        });
      }
这没什么毛病啊!

官方文档是这么写的:
在这里插入图片描述
在这里插入图片描述

到这,我就去监听了,发现没什么卵用(排个雷)

后来请教了一位大神,一语道破:换页是异步

瞬间懂了,异步操作一下就好了,上代码:

async handleCurrentPage(val) {
        console.log(val);
        let that = this;
        that.tableData = [];
        that.total = 0;
        let url = "your url" + val;
        // console.log(url);
        await that.request(url, {}, "GET", {}).then((res) => {
          console.log(res.data);
          that.total = res.data.count;
          for (let i = 0; i < res.data.data.length; i++) {
            let obj = {};
            obj.index = i + 1;
            obj.id = res.data.data[i].id;
            obj.name = res.data.data[i].name;
            obj.score = res.data.data[i].score;
            obj.counter = res.data.data[i].counter;
            that.tableData.push(obj);
          }
          this.$message({
            message: "数据已更新",
            type: "success",
          })
        }).catch((res) => {
          console.log(res);
          this.$message({
            message: "数据请求失败",
            type: "error",
          })
        });
        that.currentPage=val;
      }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用Vue3和Element UI实现分页的示例代码: ```vue <template> <div> <el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" /> </div> </template> <script> import { ref } from 'vue'; import { ElPagination } from 'element-plus'; export default { components: { ElPagination, }, setup() { const currentPage = ref(1); const pageSize = ref(10); const total = ref(0); function handleCurrentChange(val) { currentPage.value = val; fetchData(); } function handleSizeChange(val) { pageSize.value = val; currentPage.value = 1; fetchData(); } function fetchData() { // 在这里发起请求获取分页数据 // 请求参数包括 currentPage.value 和 pageSize.value // 请求成功后更新 total.value 和分页数据 } fetchData(); return { currentPage, pageSize, total, handleCurrentChange, handleSizeChange, }; }, }; ``` 在这个示例中,我们使用了Vue3的Composition API来管理组件状态。我们使用了`ref`函数来创建响应式变量,这些变量包括当前页码、每页显示的条目数和总条目数。我们还使用了Element UI的`ElPagination`组件来渲染分页器,并监听了`current-change`和`size-change`事件来处理页码和每页显示条目数的变化。在`handleCurrentChange`和`handleSizeChange`函数中,我们更新了当前页码和每页显示条目数,并重新发起了请求获取分页数据。在`fetchData`函数中,我们可以发起请求获取分页数据,并更新总条目数和分页数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJR10byh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值