Angular / TypeScript:在订阅

时间:2017-11-29 12:51:40

标签: angular typescript

我正在使用Angular(4)并需要帮助来处理异步数据:

下面你可以看到方法connect()。第一个命令订阅我的服务的Observable。以下行也需要在此订阅中。但我不知道怎么做。该方法应将方法getSortedData()的结果作为Observable返回。

我项组分

   //...
    items: Item[];
    //...
    connect(): Observable<Item[]> {
            this.myItemService.getItem().subscribe(response => {
                this.items = response;
            });
            const displayDataChanges = [
                this.myItemService.getItem(),
                this.sort.sortChange,
            ];
            return Observable.merge(...displayDataChanges).map(() => {
                return this.getSortedData(this.items);
            });
        }
    //..

1 个答案:

答案 0 :(得分:1)

不要在运算符内读取可变状态。当它们发生变化时,observable将不会知道也不会再次运行您的代码。

所以我删除了this.items的使用情况,并且我将sort参数传递给getSortedData()

connect(): Observable<Item[]> {
  const displayDataChanges = [
    this.myItemService.getItem(),
    this.sort.sortChange,
  ];
  return Observable.combineLatest(...displayDataChanges).map(([items, sort]) => {
    return this.getSortedData(items, sort);
  });
}

而不是merge(),我调用combineLatest(),每当任何一个观察者改变时,它将运行以下运算符,每个运算符都包含最新值。