【问题标题】:Angular2 Observable ListAngular2 可观察列表
【发布时间】:2016-06-17 05:50:10
【问题描述】:

我在 Ionic 应用程序中遇到了一些问题(数据异步更新,但 UI 没有相应更新)。我已经为这个问题挠了很久,现在正试图测试一种不同的方法:使用Observables。但我不确定如何实现它。网络上带有Observables 的教程侧重于使用已经返回ObservableHttp 服务。我的场景如下:

我有一个 DataService 包含 Person 对象的列表。该服务有一个返回此列表的 getter。

export class DataService {
  private _list: Person[] = [];
  get list(): Person[] { return this._list }
}

早些时候,我直接在我的组件中使用这个列表:

<ion-list>
  <ion-item *ngFor="let person of dataService.list">
    {{person.name}}
  </ion-item>
</ion-list>

现在我想向DataService 添加另一个getter,它将返回Person[] 列表中的Observable。我不知道的是:

  1. 如何以及在何处为列表定义Observable。我是将Observable 定义为DataService 属性并在构造函数中对其进行初始化,还是直接从服务获取器返回一个新的Observable?以及如何将列表包含在 Observable 中?
  2. 如何在我的组件中使用这个Observable getter? *ngFor="???"
  3. 当列表被异步更改时,如何向Observable 发出列表已被修改的信号?

我希望这能解决我的 UI 不更新问题。

【问题讨论】:

  • Observable是什么对象?是 RxJava Observable 吗?
  • RxJs 我相信.. 那是 Angular2 默认使用的库,对吧?
  • 哇,我对 Angular 知之甚少。它是跨平台的 - Android 和 iOS?
  • 还有WindowsPhone .. =P

标签: angular observable


【解决方案1】:

想通了=)

数据服务

export class DataService {

    private _list: Person[] = [];
    private _observableList: BehaviorSubject<Person[]> = new BehaviorSubject([]);

    get observableList(): Observable<Person[]> { return this._observableList.asObservable() }

    add(person: Person) {
        this._list.push(person);
        this._observableList.next(this._list);
    }

}

组件模板

<ion-list>
    <ion-item *ngFor="let person of dataService.observableList | async">
        {{person.name}}
    </ion-item>
</ion-list>

从这里获得帮助:

https://dzone.com/articles/how-to-build-angular-2-apps-using-observable-data-1 https://github.com/jhades/angular2-rxjs-observable-data-services https://coryrylan.com/blog/angular-2-observable-data-services

【讨论】:

  • 你不需要任何 Observable 的错误处理回调吗?那么退订呢?
  • 对于我的特殊情况..我认为不需要任何错误处理..它不像数据来自可能发生错误的外部服务器..它只是一个可观察的列表由应用程序本身填充.. 至于退订,我现在不确定.. 我相信 Angular 应该在页面被销毁时处理退订,因为我使用 Angular 的async 管道.. 但不太确定..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 2016-10-29
  • 2017-01-29
  • 2023-03-25
  • 1970-01-01
  • 2018-07-09
相关资源
最近更新 更多