• 使用其他来源的Observable
    • Observable HTTP Events
    • Observable Form Events

    使用其他来源的Observable

    在上面的例子中,我们从头开始创建Observable,这在理解Observable的解剖结构时特别有用。

    但是,我们将经常从回调,promise,事件,集合或使用API上可用的许多运算符创建Observable。

    Observable HTTP Events

    任何Web应用程序中的常见操作是向服务器获取或发布数据。 Angular应用程序使用Http库来实现这一点,它以前使用Promises以异步方式操作。 更新的Http库现在合并了Observable,用于触发事件和获取新数据。 让我们快速浏览一下:

    1. import {Component} from '@angular/core';
    2. import {Http} from '@angular/http';
    3. import 'rxjs/Rx';
    4. @Component({
    5. selector: 'app',
    6. template: `
    7. <b>Angular 2 HTTP requests using RxJs Observables!</b>
    8. <ul>
    9. <li *ngFor="let doctor of doctors">{{doctor.name}}</li>
    10. </ul>
    11. `
    12. })
    13. export class MyApp {
    14. private doctors = [];
    15. constructor(http: Http) {
    16. http.get('http://jsonplaceholder.typicode.com/users/')
    17. .flatMap((data) => data.json())
    18. .subscribe((data) => {
    19. this.doctors.push(data);
    20. });
    21. }
    22. }

    这个基本示例概述了Http库常见例程如get,post,put和delete所有返回Observables,允许我们异步处理任何结果数据。

    Observable Form Events

    让我们来看看Observables如何在Angular 2形式中使用。 表单中的每个字段都被视为一个Observable,我们可以订阅和监听对输入字段的值所做的任何更改。

    1. import {Component} from '@angular/core';
    2. import {FormControl, FormGroup, FormBuilder} from '@angular/forms';
    3. import 'rxjs/add/operator/filter';
    4. import 'rxjs/add/operator/map';
    5. @Component({
    6. selector: 'app',
    7. template: `
    8. <form [formGroup]="coolForm">
    9. <input formControlName="email">
    10. </form>
    11. <div>
    12. <b>You Typed Reversed:</b> {{data}}
    13. </div>
    14. `
    15. })
    16. export class MyApp {
    17. email: FormControl;
    18. coolForm: FormGroup;
    19. data: string;
    20. constructor(private fb: FormBuilder) {
    21. this.email = new FormControl();
    22. this.coolForm = fb.group({
    23. email: this.email
    24. });
    25. this.email.valueChanges
    26. .filter(n=>n)
    27. .map(n=>n.split('').reverse().join(''))
    28. .subscribe(value => this.data = value);
    29. }
    30. }

    这里我们通过初始化一个新的FormControl字段并将其分组到一个绑定到coolForm HTML表单的FormGroup中来创建一个新的表单。 控件字段有一个属性.valueChanges,它返回一个我们可以订阅的Observable。 现在每当用户在字段中输入内容时,我们会立即得到它。