antdv的表格组件如何实现滚动加载下一页数据

文章介绍了在antdv的表格组件没有内置滚动事件的情况下,如何通过监听外层父元素的滚动事件来自定义实现数据加载。当滚动到底部时,调用loadNextPage方法获取新数据,并使用$forceUpdate强制更新视图,以解决数据不显示的问题。注意,$forceUpdate的使用应视具体场景而定。

由于antdv的组件中没有可以直接用的滚动事件,但由于某些业务我们不得不使用他的表格组件,所以这里就需要我们自己来解决实现滚动请求数据。

并且由于antdv的表格组件内部使用了虚拟滚动技术,无法通过ref获取到Table组件的原生dom节点,所以这里使用的方法是在表格外层加一个父元素。

 给父元素一个固定高度,并开启溢出滚动

 

methods: {
    onScroll(e) {
      const { target } = e;
      // 如果滚动到底部,且没有正在加载下一页数据,则执行 loadNextPage 方法
      if (target.scrollTop + target.clientHeight === target.scrollHeight && !this.isLoading) {
        this.isLoading = true;
        this.loadNextPage().then(() => {
          this.isLoading = false;
        });
      }
    },
    async loadNextPage() {
      this.currentPage++;
      const nextPageData = await axios.get(`/api/data?page=${this.currentPage}`);
      this.dataSource = this.dataSource.concat(nextPageData);
    },
}

代码写到这里应该可以解决大部分问题,但是不同的项目环境也可能不一样,有些小伙伴写到这里可能会出现数据更新,但是视图不更新的情况,所以这里可以加一句$forceUpdate() 方法来强制更新视图,否则加载的新数据不会被渲染出来。

|
 async loadNextPage() {
   this.currentPage++;
   const nextPageData = await axios.get(`/api/data?page=${this.currentPage}`);
   this.dataSource = this.dataSource.concat(nextPageData);
   this.$forceUpdate();  // 强制更新视图
 },

 需要注意的是,能否调用 $forceUpdate 方法也取决于具体的场景,有时候可能会存在更好的解决方案。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值