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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值