为什么80%的码农都做不了架构师?>>>   

Observable的通俗理解


Observable在消息发布者和观察者Observer之间起到一个媒体中介的作用,Observer是真正需要接受信息的人。Observable的实例提供了一个订阅函数,subscribe()。当Observable的实例接收到信息时,将Observer作为参数传递给subscribe(),也就是通过subscribe()函数通知Observer,Observer接到通知后,使用next()方法再通知Observable()表示可以传数据了,然后Observer可以一直接收到数据,直到发生error(),或是数据接收完成,complete();

创建Observable对象的几种情形


  1. 通过promise创建
    import {fromPromise} from 'rxjs';const data = fromPromise(fetch('api/endpoint'));data.subscribe({next(response){console.log(response);},error(err){console.error('Error' + err);},complete(){console.log('Completed');}});
  1. 通过counter创建
  import {interval} from 'rxjs';//创建一个将要在计时器上发布值的Observableconst secondsCounter = interval(1000);//开始发布值secondsCounter.subscribe(n =>console.log(`It is been ${n} seconds since subscribeing`));
  1. 通过事件创建
   import {fromEvent} from 'rxjs';const el = document.getElementById('my-element');const mouseMoves = fromEvent(el,'mousemove');const subscription = mouseMoves.subscribe((evt:MouseEvent)=>{console.log(`Cooeds:${evt.clientX} X ${evt.clientY} `);if(evt.clientX <40 && evt.clientY <40){subscription.unsubscribe();}});

4.通过ajax创建

 import {ajax} from 'rxjs/ajax';const apiData = ajax('/api/data');apiData.subscribe(res =>console.log(res.status,res.response));

angular中用到的Observable


  • EventEmitter:它是继承于Observable的,但是又有了自己的emit(),用来将要发送的值传递给 observer.next();如下代码:
//html文件
<zippy (open)="onOpen($event)" (close)="onClose($event)"></zipppy>
//ts文件
@Component({selector: 'zippy',template: `<div class="zippy"><div (click)="toggle()">Toggle</div><div [hidden]="!visible"><ng-content></ng-content></div></div>`})
export class ZippyComponent {visible = true;@Output() open = new EventEmitter<any>();@Output() close = new EventEmitter<any>();toggle() {this.visible = !this.visible;if (this.visible) {this.open.emit(null);} else {this.close.emit(null);}
}
  • HttpClient:它从 HTTP 方法调用中返回了可观察对象。例如,http.get(‘/api’) 就会返回可观察对象
getHeroes(): Observable<Hero[]> {// this.messageService.add('HeroService:fetched heroes');//发送数据到缓存中// return of(HEROES);// 这里可以改成HttpClient.get<Hero[]>这里也会返回一个Observable<Hero[]>// 采用RxJS中的of()方法模拟获取数据return this.http.get<Hero[]>(this.heroesUrl).pipe(tap(heroes => this.log(`fetched heroes`)),catchError(this.handleError('getHeroes', [])));
  • router:ActivatedRoute 是一个可注入的路由器服务,它使用Observable来获取关于路由路径和路由参数的信息;如:
    import { ActivatedRoute } from '@angular/router';@Component({selector: 'app-routable',templateUrl: './routable.component.html',styleUrls: ['./routable.component.css']})export class Routable2Component implements OnInit {constructor(private activatedRoute: ActivatedRoute) {}ngOnInit() {this.activatedRoute.url.subscribe(url => console.log('The URL changed to: ' + url));}}
  • reactive forms:响应式表单,表单有些属性用Observable来监听表单控件的值;FormControl 的 valueChanges和 statusChanges 包含了会发出变更事件的Observable,如图:
    import { FormGroup } from '@angular/forms';@Component({selector: 'my-component',template: 'MyComponent Template'})export class MyComponent implements OnInit {nameChangeLog: string[] = [];heroForm: FormGroup;ngOnInit() {this.logNameChange();}logNameChange() {const nameControl = this.heroForm.get('name');nameControl.valueChanges.forEach((value: string) => this.nameChangeLog.push(value));}}

参考:angular官方文档

转载于:https://my.oschina.net/hyzccc/blog/1841860

angular--Observable总结相关推荐

  1. Angular Observable数据类型的单元测试数据准备

    我有一个Component,其items属性是一个嵌套的Observable: items$: Observable<Observable<Product>[]> = this ...

  2. angular Observable 怎么自动取消订阅

    rxjs 的 Observable(可观察对象)极大的方便了我们的开发,但是当 subscribe(订阅) 没有多次时,前一个订阅没有取消,导致订阅方法被执行了多次. ngOnInit(): void ...

  3. 学习 React 17 系统精讲 结合TS打造旅游电商平台

    React 17 系统精讲 结合TS打造旅游电商平台 2-2 [环境搭建]开始我们的第一个React项目 2-3 [项目启动]使用create-react-app快速搭建React 2-5 [Type ...

  4. java csv快速解析_爸爸解析:闪电般的快速CSV解析体验

    java csv快速解析 总览 (Overview) With a plethora of options to parse CSV files/data and adding to it the i ...

  5. 使用 RxJs Observable 来避免 Angular 应用中的 Promise 使用

    我们通过一个具体的例子来阐述. 考虑您正在构建一个搜索输入掩码,该掩码应在您键入时立即显示结果. 如果您曾经构建过这样的东西,那么您可能会意识到该任务带来的挑战. 不要在每次击键时都点击搜索端点 将搜 ...

  6. 通过一个最简单的例子,理解Angular rxjs里的Observable对象的pipe方法

    源代码: import { of } from 'rxjs'; import { Injectable } from '@angular/core'; import { map } from 'rxj ...

  7. 在Angular里使用rxjs的异步API - Observable

    在Angular的service类里,导入Observable和of: of(HEROES) returns an Observable<Hero[]> that emits a sing ...

  8. Angular响应式开发中报错Property 'map' does not exist on type 'Observable'.引用rxjs也没用。

    Angular响应式开发源代码如下: import { Component, OnInit } from '@angular/core'; import {Observable} from 'rxjs ...

  9. angular的observable

    类似于promise,angular里有observable来处理异步操作,接下来简要介绍一下他.在使用observable之前,需要在相应的组件里先引入 import { Observable } ...

  10. Angular 可观察对象(Observable)

    可观察对象(Observable) 可观察对象支持在应用的发布者和订阅者之间传递消息. 可观察对象是声明式的 -- 即定义的用于发布值的函数,在有消费者订阅它之前,这个函数不会实际执行. 可观察对象可 ...

最新文章

  1. sqlyog.err文件可以删掉吗_苹果备忘录删掉的东西可以找回来吗?可以恢复被删内容的便签备忘录软件...
  2. “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)
  3. CodeIgniter的快速操作
  4. ASP.NET Core SignalR:集线器Hub
  5. C++新特性探究(六):auto
  6. Vim 可视化模式入门
  7. 3、贝叶斯优化相关理论知识
  8. python 数据挖掘论文_基于python的WEB数据挖掘技术实现与研究
  9. CH579 以太网转串口 串口服务器代码
  10. 微信小程序最全Tab选项卡,你要的功能都在这里啦
  11. 微信小程序 转发 分享功能
  12. Python3 用turtle库学画画——(一)美国队长盾牌
  13. 最简单的方法来压缩图片(无需下载工具)
  14. 声学模型(一) hmm声学训练流程
  15. 《最好的告别》:如何优雅地走向生命终点
  16. 自学Java day18 jvav反射专题 从jvav到架构师
  17. Zookeeper 序列化
  18. windows远程桌面连接redhat
  19. Salesforce Aura 组件
  20. ARM 立即寻址之立即数的形成 —— 如何判断有效立即数

热门文章

  1. merge into报错ORA-00926、ORA-38014
  2. AngularJS-compareDirective.js 验证指令
  3. 04:输出保留3位小数的浮点数
  4. BZOJ 3747 POI2015 Kinoman 段树
  5. PHP安全新闻早8点_1127
  6. windows--bat--设置变量的方法
  7. Command line is too long. Shorten command line for Application---微服务升级_SpringCloud Alibaba工作笔记0067
  8. k8s集群资源监控-搭建监控平台(prometheus和grafana)---K8S_Google工作笔记0053
  9. Netty工作笔记0085---TCP粘包拆包内容梳理
  10. Netty工作笔记0044---Netty案例源码分析