响应式编程和管道

2019-01-22  本文已影响0人  2764906e4d3d

双向绑定

<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编程模型

subscription.unsubscribe()

  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>
<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;
  }

}
上一篇 下一篇

猜你喜欢

热点阅读