Rxjs 如何使用。使用FirebaseListObservable?
如果我尝试在FireBaseListObservable上使用RxJS运算符,如.take、.skip等,则会出现“take不是函数”错误: 即使不导入take也可以工作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
如何将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