ionic5 实现请求数据以及上拉加载更多功能

Posted 前进道路上的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ionic5 实现请求数据以及上拉加载更多功能相关的知识,希望对你有一定的参考价值。

准备

在实现这个功能之前,我先新建了一个springboot的项目用于模拟提供数据的服务端
在这里插入图片描述
然后,我们配置网关参考https://jingyan.baidu.com/article/eae07827456a821fed54856f.html
springboot启动后,就形成了一个服务端了
接下来我们实现前端请求功能

get请求数据

Angular5.x以后get、post和服务器交互使用的是HTTPClientModule模块,所以首先我们需要引入HttpClientModule模块

在app.module.ts中引入HttpClientModule并注入

app.module.ts:
引入HttpClientModule
在这里插入图片描述
注入HttpClientModule
在这里插入图片描述

新建get请求的service服务

我们把实现get请求的功能整合到一个service里面,然后需要用到get请求的时候调用service相应的方法

新建service页面

 ionic g service services/httpservice

在这里插入图片描述

引入HttpClient并在构造函数声明

httpservice.service.ts:
在这里插入图片描述

service中新建Get请求数据方法

这个方法是异步方法,使用promise来封装

get(api) {
  return new Promise((resolve,reject)=>{
    this.http.get(api).subscribe((response)=>{
        resolve(response);
    },(err)=>{
        reject(err);
    });
  });
}

service中get请求的使用

app.module.ts引入请求数据的服务

首先我们需要在app.module.ts中引入该服务
app.module.ts:
在这里插入图片描述

页面ts引入请求数据的服务

在这里插入图片描述

get请求数据并呈现

然后在页面上新建ion-list组件用于呈现list
tab3.page.html:

<ion-list>
    <ion-item *ngFor="let item of list">
      <ion-label>{{item.title}}</ion-label>
    </ion-item>
</ion-list>

list下面新建一个下拉加载更多的组件
tab3.page.html:

<ion-infinite-scroll threshold="25%" position="bottom" (ionInfinite)="loadMore($event)">
  <ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="加载更多...">
  </ion-infinite-scroll-content>
</ion-infinite-scroll>
<p *ngIf="!hasMore">--真的拉不出来了--</p>

接下来就是在ts中创建loadMore方法了
创建之前我们新建数组list和变量page用于保存页面数组以及请求的页号,还有hasMore用于拉到最后显示文字
tab3.page.ts:
在这里插入图片描述

loadMore方法使用服务请求数据

loadMore(e) {
  var api='http://192.168.0.111:8080/hello?catid=20&page='+this.page;
  this.httpservice.get(api).then((response:any)=>{
    console.log(response);
    this.list=this.list.concat(response);
    ++this.page;
    //判断下一页是否有数据
    if(response.length<20) {
        e.target.disabled=true;
        this.hasMore=false;
    }
    e?e.target.complete():'';//告诉ion-infinite-scroll数据已经更新完成,不加这句的话会卡死
  })
}

里面请求成功后,将数据拼接入list中,然后页面加一,之后判断回复长度是否为20,如果不为20就说明是最后一页了,这是就要将下拉加载更多组件禁用掉,并显示最后一行文字“–真的拉不出来了–”

最后我们在初始化方法中使用loadMore方法用于显示第一个页面
tab3.page.ts:

 ngOnInit(): void{
    this.loadMore(null);
  }

测试

在这里插入图片描述

在这里插入图片描述

相应代码参考 https://download.csdn.net/download/u010574271/18750139

以上是关于ionic5 实现请求数据以及上拉加载更多功能的主要内容,如果未能解决你的问题,请参考以下文章

Android RecyclerView上拉加载更多item点击事件(显示获取的数据)

android中如何实现上拉加载更多功能(建议收藏)

Android 开发 上拉加载更多功能实现

FlutterListView 列表高级功能 ( ScrollController 上拉加载更多 )

uniapp实现上拉加载更多及下拉刷新(假数据版)

vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多