【发布时间】:2017-03-29 23:52:18
【问题描述】:
如果我尝试在 FireBaseListObservable 上使用 .take、.skip 等 RxJS 运算符,我会收到“take is not a function”错误:
import {Component} from '@angular/core';
import {AngularFire, FirebaseListObservable} from 'angularfire2';
import {Observable} from 'rxjs';
export class AppComponent {
items: FirebaseListObservable<any>;
constructor(public af: AngularFire) {
// this works
Observable.interval(1000).take(5).subscribe(x => console.log(x));
this.items = af.database.list('/items');
// this does not
this.items.take(1).subscribe();
}
}
编辑: 通过 import "rxjs/add/operator/take" 导入 .take;确实有效,但现在我还有另一个问题:
为什么
Observable.interval(1000).take(5).subscribe(x => console.log(x));
即使不导入镜头也能工作?
我如何将 Observable 转换为 FirebaseListObservable?
【问题讨论】:
-
您能否包含您用于
Observable的import语句? -
我已经用一个示例演员更新了答案(以及我提到它的原因)。在使用
import {Observable} from 'rxjs';时,您已经完整地导入了 RxJs。我没有解释为什么这不会导致take(以及所有其他运算符)在 AngularFire2 observables 上可用。这是一个谜。要深入了解它,您需要包含所有import语句和版本等。如果我使用该导入,我会得到所有运算符。 -
@cartant:现在包括所有导入
-
我无法重现 angularfire2 2.0.0-beta.5 和 rxjs 5.0.0-beta.12 的问题。以您的方式导入
Observable让我获得了所有操作员。你的错误是 TypeScript 错误而不是运行时错误,对吧? -
我的错误是运行时错误:zone.js:390Error: Uncaught (in promise): Error: Error in ./AppComponent class AppComponent_Host - inline template:0:0 由:this.items 引起。 take 不是函数(…)不过我使用的是 beta.6
标签: rxjs angularfire2