Rxjs 如何使用。使用FirebaseListObservable?

Rxjs 如何使用。使用FirebaseListObservable?,rxjs,angularfire2,Rxjs,Angularfire2,如果我尝试在FireBaseListObservable上使用RxJS运算符,如.take、.skip等,则会出现“take不是函数”错误: 即使不导入take也可以工作 如何将Observable转换为FirebaseListObservable?RxJS的分布方式允许将其整体或小块导入 对于要包含的take运算符及其TypeScript声明,您可以选择全部导入RxJS: import * as Rx from "rxjs/Rx"; 或者只能导入所需的take运算符: import "rxj

如果我尝试在FireBaseListObservable上使用RxJS运算符,如.take、.skip等,则会出现“take不是函数”错误:

即使不导入take也可以工作


如何将Observable转换为FirebaseListObservable?

RxJS的分布方式允许将其整体或小块导入

对于要包含的
take
运算符及其TypeScript声明,您可以选择全部导入RxJS:

import * as Rx from "rxjs/Rx";
或者只能导入所需的
take
运算符:

import "rxjs/add/operator/take";
请注意,AngularFire2 Observable实现了与运算符的合成。这样做的效果是,在使用运算符后,类型将是
Observable
,而不是
FirebaseListObservable
,因此如果要将合成的Observable分配给
FirebaseListObservable
变量或属性,则需要强制转换

例如:

let item = af.database.list('/items').take(1) as FirebaseListObservable<any>;
您将完整地包含RxJS,并且在编写
FirebaseListObservable
实例时,所有操作符都应该可用


但是,如果导入的
可观察的
未在导入到的模块中的任何位置使用,则将忽略它,并且您将不会得到任何导入内容。这可能就是为什么您需要显式导入
take

RxJS的原因,RxJS的分发方式允许将其整体导入或以小部分导入

对于要包含的
take
运算符及其TypeScript声明,您可以选择全部导入RxJS:

import * as Rx from "rxjs/Rx";
或者只能导入所需的
take
运算符:

import "rxjs/add/operator/take";
请注意,AngularFire2 Observable实现了与运算符的合成。这样做的效果是,在使用运算符后,类型将是
Observable
,而不是
FirebaseListObservable
,因此如果要将合成的Observable分配给
FirebaseListObservable
变量或属性,则需要强制转换

例如:

let item = af.database.list('/items').take(1) as FirebaseListObservable<any>;
您将完整地包含RxJS,并且在编写
FirebaseListObservable
实例时,所有操作符都应该可用


但是,如果导入的
可观察的
未在导入到的模块中的任何位置使用,则将忽略它,并且您将不会得到任何导入内容。这可能就是为什么您需要显式导入
take

谢谢您的回答,我现在有更多问题;)请参阅编辑。感谢您的回答,我现在有更多问题;)请参阅编辑。您是否可以包括用于
可观察的
导入
语句?我已经用一个示例更新了答案(以及我提到它的原因)。在使用
从'rxjs'导入{Observable}时您已经完整导入了RxJs。我无法解释为什么这不会导致AngularFire2观测值上出现
take
(以及所有其他操作符)。这是个谜。为了弄清问题的真相,您需要包括所有的
import
语句和版本等。如果我使用该导入,我会得到所有运算符。@cartant:现在包括所有导入。我无法重现angularfire2 2.0.0-beta.5和rxjs 5.0.0-beta.12的问题。导入
Observable
您的方式可以获得所有操作符。您的错误是TypeScript错误而不是运行时错误,对吗?我的错误是运行时错误:zone.js:390Error:Uncaught(承诺中):error:error in./AppComponent类AppComponent_Host-内联模板:0:0由以下原因引起:this.items.take不是函数(…)我正在使用beta.6,但您是否可以将您用于
Observable
import
语句包括在内?我已经用一个示例更新了答案(以及我提到它的原因)。在使用
从'rxjs'导入{Observable}时您已经完整导入了RxJs。我无法解释为什么这不会导致AngularFire2观测值上出现
take
(以及所有其他操作符)。这是个谜。为了弄清问题的真相,您需要包括所有的
import
语句和版本等。如果我使用该导入,我会得到所有运算符。@cartant:现在包括所有导入。我无法重现angularfire2 2.0.0-beta.5和rxjs 5.0.0-beta.12的问题。导入
Observable
您的方式可以获得所有操作符。您的错误是TypeScript错误,而不是运行时错误,对吗?我的错误是运行时错误:zone.js:390Error:Uncaught(承诺中):error:error in./AppComponent类AppComponent_Host-内联模板:0:0由以下原因引起:this.items.take不是函数(…),但我正在使用beta.6