angular Observable
1.回调函数
/** 1.设计实现函数 */
print_msg(msg) {
console.log(msg);
} /** 2.设计调用函数,param1:实现函数参数,param2:实现函数本身 */
async_read(msg, callback) {
callback(msg);
} constructor() {
/** 3.调用 调用函数 */
this.async_read('我要打印的消息', this.print_msg);
}
这样做可以通过3给2传入不同的函数名而实现不同的操作。
2.Promise
study_promise() {
const p = new Promise(resolve => {
resolve('成功回调');
}).then((res) => {
console.log(res);
return res;
}).then((res) => {
console.log(res);
});
}
3.Observable

3.1先写一个简单的例子,5s内每隔一秒打印一次‘hello’
constructor() {
this.study_observable()
.subscribe((res) => {
console.log(res);
});
}
study_observable(): Observable<string> {
let i = ;
return Observable.create((observer) => {
setInterval(() => {
i++;
observer.next('hello_' + i);
if (i === ) {
observer.complete();
}
}, );
});
}
3.2 of创建Observable 并订阅一个Observer
ngOnInit() {
this.getdata();
}
getdata() {
const myObservable = of(, , );
const myObserver = {
next: x => console.log('next' + x),
error: err => console.error('error' + err),
complete: () => console.log('complete')
};
myObservable.subscribe(myObserver);
}
of创建一个可观察对象,上面的代码等价于
ngOnInit() {
this.getdata();
}
getdata() {
// const myObservable = of(1, 2, 3);
const myObservable = new Observable(this.sequenceSubscriber);
const myObserver = {
next: x => console.log('next' + x),
error: err => console.error('error' + err),
complete: () => console.log('complete')
};
myObservable.subscribe(myObserver);
}
sequenceSubscriber(observer: Observer<any>) {
observer.next();
observer.next();
observer.next();
observer.complete();
return { unsubscribe() { } };
}
3.3 页面 Async 管道
<div>{{time$ | async}}</div>
这样写就相当于订阅了time$,会实时接收next过来的值,
Observable定义如下,用来逐秒打印时间,
页面接收的值类型为Observable<T>,下方为string
time$: Observable<string>;
ngOnInit() {
this.time$ = new Observable(observer => {
setInterval(() => {
observer.next(new Date().toString());
}, );
});
}
若是要接收object对象,需要这样取值
<ng-container *ngIf="time$ | async as time">
<div>
{{time.date}}
{{time.time}}
</div>
</ng-container>
ts:
time$: Observable<object>;
ngOnInit() {
this.time$ = new Observable(observer => {
setInterval(() => {
const e = new Date();
observer.next({ date: e.toDateString(), time: e.toTimeString() });
}, );
});
}
3.4 Object
既可以作为Observable、也可以作为Observer
支持多播
constructor() {
const subject = new Subject();
/*作为被观察者 支持多播 可以订阅多个观察者 */
subject.subscribe(
{
next: x => console.log('A:' + x)
}
);
subject.subscribe(
{
next: x => console.log('B:' + x)
}
);
/*发送值 */
subject.next();
subject.next();
/*Subject作为观察者,可以被Observalbe订阅 */
const fo = of(, , );
fo.subscribe(subject);
}
结果:

3.5 BehaviorSubject 是 Subject的子类
它有一个“当前值”的概念,保存了发送给消费者的最新值。
并且当有新的观察者订阅时,会立即从 BehaviorSubject 那接收到“当前值”。
constructor() {
const bs = new BehaviorSubject(); // 给一个当前值(初始值)
bs.subscribe({
next: v => console.log('A' + v),
});
bs.next();
bs.subscribe({
next: v => console.log('B' + v)
});
bs.next();
}
结果:

3.6 ReplaySubject 是Subject的子类
发送旧值给新的订阅者
constructor() {
const bs = new ReplaySubject(); // 回放三个值
bs.subscribe({
next: v => console.log('A' + v),
});
bs.next();
bs.next();
bs.next();
bs.next();
bs.subscribe({
next: v => console.log('B' + v)
});
bs.next();
}
结果:

3.7 AsyncSubject 是Subject的子类
只有当 Observable 执行完成时(执行 complete()),它才会将执行的最后一个值发送给观察者。
constructor() {
const bs = new AsyncSubject();
bs.subscribe({
next: v => console.log('A' + v),
});
bs.next();
bs.next();
bs.next();
bs.next();
bs.subscribe({
next: v => console.log('B' + v)
});
bs.complete();
bs.next();
}
结果:

angular Observable的更多相关文章
- [Angular] Observable.catch error handling in Angular
import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/opera ...
- [Angular 2] Rendering an Observable with the Async Pipe
Angular 2 templates use a special Async pipe to be able to render out Observables. This lesson cover ...
- Angular基础(八) Observable & RxJS
对于一个应用来说,获取数据的方法可以有很多,比如:Ajax, Websockets, LocalStorage, Indexdb, Service Workers,但是如何整合多种数据源.如何避免BU ...
- Angular快速学习笔记(4) -- Observable与RxJS
介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中的发布者和订阅者之间传递消息. 可观察对象可以发送多个任意类型的值 -- 字面量.消息.事件. 基 ...
- [Angular] Creating an Observable Store with Rx
The API for the store is really simple: /* set(name: string, state: any); select<T>(name: stri ...
- Angular的Observable可观察对象(转)
原文:https://blog.csdn.net/qq_34414916/article/details/85194098 Observable 在开始讲服务之前,我们先来看一下一个新东西——Obse ...
- [Angular 2] Rendering an Observable Date with the Async and Date Pipes
Instead of simply pushing numbers on a timer into the template, now we'll move on to pushing actual ...
- Angular学习笔记—RxJS与Observable(转载)
1. Observable与观察者模式的关系 其实这里讲的Observable就是一种观察者模式,只不过RxJS把Observable结合了迭代模式以及附件了很多的operator,让他变得很强大,也 ...
- [Angular] Pluck value from Observable
export class MailFolderComponent implements OnInit{ title: Observable<string>; messages: Obser ...
随机推荐
- 题解 P1944 最长括号匹配_NOI导刊2009提高(1)
栈,模拟 把每个元素逐个入栈 如果和栈顶元素匹配,那么一块弹出去,同时标记这里是可匹配的. 取出连续的,最长的可匹配的序列即可. #include <iostream> #include ...
- vue项目接口域名动态获取
需求: 接口域名是从外部 .json 文件里获取的. 思路: 在开始加载项目前 进行接口域名获取,然后重置 接口域名的配置项. 实现: 1.config/index.js 文件 进行基础配置 impo ...
- 菜鸟学IT之第一次作业
作业的要求来自于:https://www.cnblogs.com/greyzeng/p/9581624.html 反思· 为何要来上课并且认真参与? 在大学中的师生关系? 自我简述题目 心得· 学习态 ...
- Python----Kernel SVM
什么是kernel Kernel的其实就是将向量feature转换与点积运算合并后的运算,如下, 概念上很简单,但是并不是所有的feature转换函数都有kernel的特性. 常见kernel 常见k ...
- 在IIS上搭建Exceptionless日志收集框架
系统环境要求 .NET 4.6.1,如果已安装过VS请忽略.Java Sdk1.8+,Win10环境下配置Java 环境变量参考,ElasticSearch 5.1,它是一个基于Lunce搜索服务器. ...
- Tutorial 02_熟悉常用的HDFS操作
Shell命令实现: (1)向HDFS 中上传任意文本文件,如果指定的文件在HDFS 中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件: (2) 从HDFS 中下载指定文件,如果本地文 ...
- Linux下Nginx配置阿里云 SSL证书实现HTTPS访问
这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...
- 使用c++如何实现在gRPC中传输文件
使用c++实现gRPC远程调用框架中传输文件,proto文件如下: syntax = "proto3"; package transferfile; service Transfe ...
- poj 3694(割边+lca)
题意:给你一个无向图,可能有重边,有q次询问,问你每次我添加一条边,添加后这个图还有多少个桥 解题思路:首先先把所有没有割边的点对缩成一个联通块,无向图一般并查集判环,然后就得到一个割边树,给你一条新 ...
- 动态强制改变for循环里面item的值
var item = that.data.articles[inde_x]//获取数据列表 item.is_collection = 1//希望将特定的值改变 console.log(that.dat ...