数组中的Observable在TypeScript中不起作用

时间:2016-08-09 08:31:42

标签: angularjs typescript rxjs

我正在尝试从数组中创建一个observable,正如文档在https://github.com/ReactiveX/rxjs/blob/master/doc/observable.md中所说:

import {Observable} from 'rxjs/Observable';
let theList = Observable.from(sites);

但我明白了:

TypeError: Observable_1.Observable.from is not a function

我的目标是使用reducescan等运算符覆盖Observable序列,因为标准Observable似乎不支持,如下所示:

this.theList = new Observable(observer => {
  // this works
  observer.next(sites);
});

this.sub = this.theList.reduce(function() {
  // this is never called
  return acc;
}).subscribe(l => {
  // this is never called
  this.finalList = l;
});

可以在此Plnkr中找到代码:http://plnkr.co/edit/cKEqtpsrc/app.ts)。

谢谢!

2 个答案:

答案 0 :(得分:4)

有多种解决方案:

1 - 导入特定元素

在您的示例中,您只是导入Observable,但是,您使用.from()方法从数组创建一个observable。因此,如果要使用它,则必须导入.from()方法。 reduce运算符也是如此。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/from';
import 'rxjs/add/operator/reduce';

2 - 导入所有运算符和方法

Observable正在从rxjs/Rx引入,因此以这种方式拉动它将自动为您提供所有操作符和方法。

import { Observable } from 'rxjs/Rx';

有什么区别?

这两种方法的最大区别在于您不会使用第一种方法一次性导入所有运算符。当您在生产模式下工作时,它会很有用。

答案 1 :(得分:1)

您正在导入最小Observable

import { Observable } from 'rxjs/Observable';

所以要使用from,你也需要这个导入:

import 'rxjs/add/observable/from';