一、上拉分页更新(加载更多)
1、在上拉更新的页面中加入ion-infinite-scroll
https://ionicframework.com/docs/api/components/infinite-scroll/InfiniteScroll/
只要在页面ion-content底部加入上面的代码,就会触发ionInfinite事件(当页面拉倒页面最底部的时候触发),执行一个方法doInfinite
<ion-content> <ion-infinite-scroll (ionInfinite)="doInfinite($event)"> <ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="正在加载更多..."> </ion-infinite-scroll-content> </ion-infinite-scroll> </ion-content>
ion-infinite-scroll 的属性:
threshold 距离底部的距离
enable 是否何用
position:button 显示的位置 可选 top
ion-infinite-scroll-content 的属性:
loadingSpinner 配置上拉加载更多的图标 常用图标:https://ionicframework.com/docs/api/components/spinner/Spinner/
loadingText 上拉加载显示的文字
2、上拉事件触发的方法
/*上拉更新*/
doInfinite(infiniteScroll){ /*接收事件对象传值*/
// console.log('11111')
this.requestData(infiniteScroll);
}import { Component } from '@angular/core';
import { IonicPage, NavController } from 'ionic-angular';
//引入请求数据的模块
import { Http, Jsonp} from '@angular/http';
//新闻详情
import { NewscontentPage } from '../newscontent/newscontent';
/**
* Generated class for the NewsPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-news',
templateUrl: 'news.html',
})
export class NewsPage {
//2、list用于存放数据
public list=[];
//1、定义一个公共page属性用于请求数据
public page=1;
public NewscontentPage=NewscontentPage; /*新闻详情页面*/
constructor(public navCtrl: NavController,public http: Http,public jsonp: Jsonp) {
//4、页面第一次进来的时候传个空值进去判断下
this.requestData('');
}
ionViewDidLoad() {
console.log('ionViewDidLoad NewsPage');
}
requestData(infiniteScroll){ /*请求数据*/
var that=this;
var url='http://localhost/appapi.ashx?a=getPortalList&catid=20&page='+this.page;
this.http.get(url).subscribe(function(data){
// console.log(data['_body']);
var response=JSON.parse(data['_body']).result;
that.list=that.list.concat(response); /*拼接每次请求的数据*/
that.page++; /*每次请求完成page+1 */
if(infiniteScroll){
infiniteScroll.complete(); /*请求完成数据更新页面*/
if(response<20){ /*没有数据 禁用上拉更新*/
infiniteScroll.enable(false);
}
}
},function(err){
})
}
/*上拉更新*/
doInfinite(infiniteScroll){ /*接收事件对象传值*/
// 3、数据请求完成需要执行infiniteScroll.complete(); 方法所以需要传参数infiniteScroll过去
this.requestData(infiniteScroll);
}
}重要方法:
infiniteScroll.complete(); //每次数据请求完成调用 注意是每次
if (this.items.length > 90) {
infiniteScroll.enable(false); //没有数据的时候隐藏 ion-infinate-scroll
}二、下拉更新(获取最新信息)
1、ionic 在下拉加载的页面中加入ion-refresher
https://ionicframework.com/docs/api/components/refresher/Refresher/
<ion-content> <ion-refresher (ionRefresh)="doRefresh($event)"> <ion-refresher-content pullingIcon="arrow-dropdown" pullingText="Pull to refresh" refreshingSpinner="circles" refreshingText="Refreshing..."> </ion-refresher-content> </ion-refresher> </ion-content>
重要事件: doRefresh
ion-refresher 的重要属性:
closeDuration 关闭 refresher 需要多少毫秒。默认值是 280。
enabled 是否启用
pullMax 默认=pullMin+60 拖至刷新状态的最大距离将自动进入刷新状态。默认情况下,拉力最大将 pullmin + 60 自动刷新
pullMin 默认=60 用户必须拉下的最小距离,直到刷新者进入刷新状态为止。默认值是60。
snapbackDuration 刷新者需要多少毫秒才能恢复到刷新状态。默认值是 280。
ion-refresher-content 的重要属性:
pullingIcon 下拉的图标
pullingText 下拉加载显示的文字
refreshingSpinner 释放的时候的加载图标
refreshingText 释放的时候的文字
重要方法:
refresher.complete(); //当数据请求完成调用
例子:
<ion-content padding>
<ion-refresher (ionRefresh)="doRefresh($event)" pullMax='300'>
<ion-refresher-content
pullingIcon="arrow-dropdown"
pullingText="Pull to refresh..."
refreshingSpinner="circles"
refreshingText="Refreshing...">
</ion-refresher-content>
</ion-refresher>
<ion-list inset >
<ion-item *ngFor="let item of list">
{{item}}
</ion-item>
</ion-list>
</ion-content>import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the RefresherPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-refresher',
templateUrl: 'refresher.html',
})
export class RefresherPage {
public list=[];
public j=0;
constructor(public navCtrl: NavController, public navParams: NavParams) {
for(var i=0;i<5;i++){
this.list.push(`这是第${i}条数据 `);
}
}
ionViewDidLoad() {
console.log('ionViewDidLoad RefresherPage');
}
doRefresh(refresher){
//模拟请求数据
setTimeout(()=>{
for(var i=0;i<5;i++){
this.list.unshift(`这是第${this.j}条数据 `);//unshift在数组前面插入数据
this.j++;
}
refresher.complete(); /*加载完成以后重新渲染页面*/
},1000)
}
}