获得"不是一个功能" RxJS出错

时间:2017-09-04 10:36:56

标签: angular typescript rxjs ngrx angular2-observables

看似突然之间我得到了RxJS的错误。

我的项目是Angular,Typescript,我使用RxJS作为NGRX redux的一部分。

我的代码似乎完全可以正常使用这个作为导入:

import { Observable } from 'rxjs/Observable'

然后,我从无处开始得到这样的错误......

Uncaught (in promise): TypeError: this.appStateStore.withLatestFrom is not a function Uncaught (in promise): TypeError: this.appStateStore.take is not a function

我能够通过添加withLatestFrom的导入来解决有关import 'rxjs/add/operator/withLatestFrom';的错误,但错误已移至抱怨.take

我猜我在某处导入错误,因为我对RxJS了解你需要导入你需要的位。但是,我已经审核了我的源代码管理更改,但我无法看到任何会导致此更改的更改(例如节点模块版本,导入语句)。

我做错了什么?

1 个答案:

答案 0 :(得分:19)

import { Rx } from 'rxjs/Rx

Rxjs v 5.4.1

1)public cache = new Rx.BehaviorSubject(''); ;

这会导入整个库。然后,您不必担心加载每个运营商。但你需要附加Rx。 我希望树摇动会优化并只挑选所需的功能(需要验证)正如评论中所提到的,树木震动无能为力。所以这不是优化方式。

import { _______ } from 'rxjs/_________';

或者您可以导入个人运算符。

这会优化您的应用以仅使用这些文件

2)Rx

此语法通常用于主要对象,如Observable本身或 Observable, Observer, BehaviorSubject, Subject, ReplaySubject 等,

可以使用此语法导入的关键字

import 'rxjs/add/observable/__________';

3)Observable.from() Observable.of()

这些通常直接附带Observable。例如

concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of, 
range, throw, timer, using, zip

可以使用以下语法导入的其他此类关键字:

import 'rxjs/add/operator/_________';

4)flatMap

这些通常在创建Observable后出现在流中。与此代码段中的Observable.of([1,2,3,4]) .flatMap(arr => Observable.from(arr)); 一样:

audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay, 
distinct, do, every, expand, filter, finally, find , first, groupBy,
ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck, 
publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take, 
takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip

使用此语法的其他此类关键字:

flatMap

<强> FlatMap mergeMapmergeMap的别名,因此我们需要导入flatMap才能使用/add

<ul> {% for a in stories %} <li><a href="{% url 'story:add_story' a.id %}">{{ a }}</a></li> {% endfor %} </ul> 导入的注意事项:

我们只需要在整个项目中导入一次。因此建议在一个地方进行。如果它们包含在多个文件中,并且其中一个文件被删除,则构建将因错误原因而失败。