1.先不做上拉触发,用button模拟一下,触发函数

export class StudyComponent implements OnInit {

  /*列表数据流 */
list$: Observable<any[]>;
/*页面缓存*/
beh: BehaviorSubject<any[]>;
/*模拟下拉事件 */
scrolEvent = new Subject(); ngOnInit() {
/*订阅scrolEvent,下方scrol()执行next的时候会跑这个订阅 */
this.scrolEvent.pipe(
map(() => {
this.getdata();
})
).subscribe();
} constructor() {
this.list$ = new Observable<any[]>();
this.beh = new BehaviorSubject<any[]>([]);
} /*获取数据 */
getdata() {
this.list$ = this.beh; // 提供观察者next新数据
const oldlist = this.beh.getValue(); // 取旧数据
this.serve()
.subscribe(v => {
this.beh.next(oldlist.concat(v));
});
} /*滚动触发函数 */
scrol() {
this.scrolEvent.next();
} /*模拟接口返回数据 */
serve() {
return of([Math.random() * , Math.random() * , Math.random()]);
}
}

  html

<ng-container *ngIf="list$ | async as list">
<div>
<p *ngFor="let item of list">{{item}}</p>
</div>
</ng-container> <button (click)="scrol()">列表</button>

2.若是有两个列表(像顶部tab有  待处理、全部)

export class StudyComponent implements OnInit {

  /*列表数据流 */
list$: Observable<any[]>;
/*模拟下拉事件 */
scrolEvent = new Subject();
/*两个页面数据 缓存*/
segData: {
flag1: BehaviorSubject<any[]>,
flag2: BehaviorSubject<any[]>
};
/*当前页标签 默认页面1*/
curFlag = 'flag1'; ngOnInit() {
this.list$ = new Observable<any[]>();
// this.segData.flag1 = new BehaviorSubject<any[]>([]);
// this.segData.flag2 = new BehaviorSubject<any[]>([]);
this.segData = {
flag1: new BehaviorSubject<any[]>([]),
flag2: new BehaviorSubject<any[]>([])
}; /*订阅scrolEvent,下方scrol()执行next的时候会跑这个订阅 */
this.scrolEvent.pipe(
map(() => {
this.getdata(this.curFlag);
})
).subscribe();
} constructor() {
} /*获取数据 */
getdata(flag: string) {
this.list$ = this.segData[flag]; // list$指向一个segData
const oldlist = this.segData[flag].getValue(); // 取旧数据
this.serve(this.curFlag)
.subscribe(v => {
this.segData[flag].next(oldlist.concat(v));
});
} /*滚动触发函数 */
scrol(flag: string) {
this.curFlag = flag;
this.scrolEvent.next();
} /*模拟接口返回数据 */
serve(flag: string) {
return of(
[
Math.random() * + flag,
Math.random() * + flag,
Math.random() + flag]
);
}
}

  html

<ng-container *ngIf="list$ | async as list">
<div>
<p *ngFor="let item of list">{{item}}</p>
</div>
</ng-container> <button (click)="scrol('flag1')">列表1</button>
<button (click)="scrol('flag2')">列表2</button>

Angular_上拉刷新的更多相关文章

  1. SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新

    下拉刷新和上拉刷新都用SwipeRefreshLayout 自带的进度条 布局 <?xml version="1.0" encoding="utf-8"? ...

  2. 使用MJRefresh遇到的一个问题,上拉刷新后tableview瞬间滑到最底部

    最近用MJRefresh上拉刷新时遇到一个问题,就是上拉刷新后,tableview会瞬间滑到最底部,用户还要往回翻才能看到新刷出来的数据,体验十分不好.查了很久没找到原因,最后发现在refreshvi ...

  3. MUI - 上拉刷新/下拉加载

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...

  4. Android UI之下拉刷新上拉刷新实现

    在实际开发中我们经常要用到上拉刷新和下拉刷新,因此今天我写了一个上拉和下拉刷新的demo,有一个自定义的下拉刷新控件 只需要在布局文件中直接引用就可以使用,非常方便,非常使用,以下是源代码: 自定义的 ...

  5. Android PullToRefreshListView上拉刷新和下拉刷新

    PullToRefreshListView实现上拉和下拉刷新有两个步骤: 1.设置刷新方式 pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH) ...

  6. ListView(2)最简单的上拉刷新,下拉刷新

    最简单的上拉刷新和下拉刷新,当listview滚动到底部时向上拉刷新数据.当listview滚动到最顶部时下拉刷新.       图1,上拉刷新 图2,下拉刷新 1,设置lisview,加载heade ...

  7. jQuery模拟原生态App上拉刷新下拉加载

    jQuery模拟原生态App上拉刷新下拉加载效果代码,鼠标上拉时会显示loading字样,并且会模拟加载一条静态数据,支持触屏设备使用. <!doctype html> <html ...

  8. Swiper+JS 上拉刷新

    JS // 上拉刷新                        var page = 2;            var isAjax = true;//加载数据前状态            $( ...

  9. iOS MJRefresh下拉、上拉刷新自定义以及系统详细讲解

    更新: MJRefresh 更新功能,默认根据数据来源 自动显示 隐藏footer,这个功能可以关闭 DoctorTableView.mj_footer.automaticallyHidden = N ...

随机推荐

  1. pytest生成测试报告-4种方法

    1.生成resultlog文件 2.生成JunitXML文件 3.生成html测试报告 > pip install pytest-html     # 通过pip安装pytest-html 4. ...

  2. 2 OpenWrt路由器系统开发与网页设计

    https://www.zhongkerd.com/news/content-729.html 摘 要: 目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户 ...

  3. C# 如何使用配置文件保存应用程序里的配置数据

    引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...

  4. python监控机器(第1版)

    # coding:utf-8 import configparser import logging import os import psutil import ctypes import platf ...

  5. DES的几种填补方式

    DES的几种填补方式 DES是对64位数据的加密算法,如数据位数不足64位的倍数,需要填充,补充到64位的倍数.   NoPadding    API或算法本身不对数据进行处理,加密数据由加密双方约定 ...

  6. How to Change Error Message Colors in Windows 10 PowerShell Console

    While this was a really easy way to change some of the settings, what if you want to do more extensi ...

  7. css解决图片拉伸问题

    在实际场景中,我们经常会遇到图片大小固定的需求,但是由于原始图片大小,比例不一样,不同图片以相同的大小展示会参差不齐.解决方法就是object-fit或者background-size属性.他们的区别 ...

  8. Linux下的sudo及配置

    sudo的常用命令 man sudoers # 参阅帮助 visudo # 编辑sudoers文件的命令 sudo -l # 查看可执行或禁止执行的命令 sudo -u user1 /bin/ls # ...

  9. k8s网络之设计与实现

    k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 K8s网络设计与实现是在学习k8s网络过程中总结的内容.在学习k8s网络各种插件 ...

  10. 第一节. .Net Core环境的安装和常用指令

    一. 环境介绍和安装 1. 环境介绍 .Net FrameWork框架:BCL(基础类库 system.dll).CLR(运行时 仅支持:Windows).FCL(一些框架,比如:MVC.WPF) . ...