响应式编程和管道

双向绑定

  • 使用双向绑定文本框中的值始终和name值一致
<input [(ngModel)]="name">
 {{name}}


响应式编程

  1. 观察者模式与rxjs,观察者注册可观察对象,可观察对象调用观察者,这是rxjs最简单的编程模型
constructor() {
  Observable.from([1,2,3,4])
    .filter(e => e%2 === 0)
    .map(e => e*e)
    .subscribe(
      e => console.log(e),
      error =>console.error(error),
      () => console.log("结束")
    );

}
  1. 可观察对象Observable(流):表示一组值或者事件的集合(1,2,3,4这四个值就是可观察对象)
    用一组事件(button的click事件)创造出一个可观察对象
var button = document.querySelector('button')
 Observable.fromEvent(button,'click')
  1. rxjs编程模型
  • 观察者Observer:一个回调函数的集合,他知道怎样监听被Observable发送的值(.subscribe方法的参数是三个函数组成的回调函数集合)
  • 订阅Subscription:表示一个可观察对象,主要用于取消注册(例如关注的是一个按钮的点击事件,调用这个方法后,就不会去处理这个按钮的点击事件)

subscription.unsubscribe()

  • 操作符Operators:纯粹的函数使开发者可以以函数编程的方式处理集合
  • .filter这个方法就是过滤流中的所有元素,将这个流中的所有偶数过滤出来
  • .map映射这个流,过滤了偶数以后取其平方
  • .subscribe订阅这个流,这三个函数表示:将结果打印出来,出现错误时将错误打印出来,这个流结束时的操作,打印“结束”
  • 流可以完成的事件:发射一个元素,抛出一个异常,发出流已经结束的信号
  1. 在主模块中引入一个模块ReactiveFormsModule,这个模块是angular中做响应式编程的模块,提供了一个对象FormControl,是angular进行表单处理时使用的类,默认情况下,无论何时表单元素发生变化,FormControl就会发射一个valuechange事件,valuechange事件会组成一个可订阅的流
<input [formcontrol]="searchInput">
searchInput:FormControl = new FormControl();


constructor() {
  this.searchInput.valueChanges
.debounceTime(500)
    .subscribe(
      stockCode=>this.getStockInfo(stockCode)
    );
  1. . debounceTime方法可以使在500ms内输入框发生变化而并不会调用getStockInfo,可以模拟出搜索框的效果,在一段时间内搜索框内的数值发生变化时不会立即显示出搜索的结果

管道

  1. 处理原始值到显示值的转换(类似vue的过滤器)
  • 只显示月日年,字母大写
newdate:Date = new Date();
<p>日期:{{newdate | date | uppercase }}</p>
  • 显示日期的年月日时分秒
<p>日期:{{newdate | date:'yyyy-MM-dd HH:mm:ss'}}</p>
  • 小数点之前保留两位,小数点之后保留两位(2-2表示小数点后最多保留2位,最少保留1位,只有小数点位数小于最小保留位数是才会触发)
<p> 圆周率{{pi | number:'2.1-2'}}</p>
  • 异步管道,用来解包一个异步的管道流(响应式编程中的流)
<p> 圆周率{{pi | async}}</p>
  1. 自定义管道

ng g pipe /multiple

  1. 管道和组件类似,都需要在模块中声明,管道实现了一个PipeTransform的接口,这个接口中只有一个方法transform,这个方法接收一个输入值,第一个参数是一个value是管道输入的原始值,args是一个可选参数(比如可以是date后面的字符串'yyyy-MM-dd HH:mm:ss'),这个方法根据传入的原始值和参数来转化这个原始值,将转换完的值返回回去
  2. 自定义管道,如果args不存在(multiple后面不加上字符串‘2’)则默认值为1
<p> 自定义管道{{pi | multiple:'2'}}</p>
export class MultiplePipe implements PipeTransform {

  transform(value: number, args?: number): any {
    if(!args){
      args=1;
    }
    return value *args;
  }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • (一)数据绑定 1.数据绑定 添加一些键盘事件 (二)DOM属性绑定 DOM属性和HTML属性。(input)上面...
    马丁路德东阅读 277评论 5 1
  • 随着前端框架react,angular以及vue的流行,响应式编程也开始在前端领域得以广泛应用。因此,了解并且理解...
    SCQ000阅读 7,465评论 1 53
  • 看到Observable和RxJS就感觉很亲切,因为之前做Android开发的时候接触过RxJava。Obs...
    tuacy阅读 5,609评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 周末回家,我的女人躲在门角,令我疑惑。鬼鬼祟祟,又出状况了?回家的时候已经很累,俺正躁着呢!为了显示大丈夫的气概,...
    航亿苇阅读 377评论 0 1