2017-08-03 57 views
7

我很困惑如何导入这些运算符。有些我可以用 import 'rxjs/add/operator/do';进口,有些我不能。例如,这是行不通的: import 'rxjs/add/operator/map';(我检查了rxjs/add/operator,map存在那里)。如何从`rxjs`包中正确导入运算符

从本质上讲什么,我要做的是重现这Angular4:

var requestStream = Rx.Observable.just('https://api.github.com/users'); 

var responseStream = requestStream 
    .flatMap(function(requestUrl) { 
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl)); 
    }); 

responseStream.subscribe(function(response) { 
    // render `response` to the DOM however you wish 
}); 

我也想知道怎么处理just运营商,因为我不能看到它在rxjs /添加/运营商。 ..

感谢所有帮助

+2

阅读'rxjs /添加/运营/ map'存在的WEL l,请参阅https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/map.ts。运算符'just'被重命名为现在被称为'of',并且您可以通过'rxjs/add/observable/of'添加它' – martin

+0

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html #static-method-of – martin

+0

@马丁,好的,谢谢关于'just'信息的信息 –

回答

12

有静态的,例如运营商RxJS:

static 
    of 
    interval 

instance 
    map 
    first 

您可能需要使用这些的Observable全局对象或观察的情况下是这样的:

Observable.of() 
observableInstance.map() 

对于您需要从add包导入模块:

import 'rxjs/add/observable/of' 
import 'rxjs/add/operator/map' 

当你导入模块它基本上通过添加对应于操作员的方法来修补类别或Observable原型。

但是你也可以直接导入这些运营商和不修补ObservableobservableInstance

import { of } from 'rxjs/observable/of'; 
import { map } from 'rxjs/operator/map'; 

of() 
map.call(observableInstance) 

随着引进[email protected]可租用运营商的你现在应该利用内置的pipe方法:

import { of } from 'rxjs/observable/of'; 
import { map } from 'rxjs/operators/map'; 

of().pipe(map(), ...) 

RxJS: Understanding Lettable Operators

+0

你能否告诉我如何找出哪个运算符是静态的,哪个是实例?现在我想使用'flatMap',但它似乎并不适用于'import'rxjs/add/operator/flatmap';'或'import'rxjs/add/observable/flatmap';'... ' –

+0

大多数静态运算符是创造性的操作员 - 他们创造了一个强项。 'flatMap'是一个实例操作符,因为它适用于observable的实例。它在5.x中被重命名为'mergeMap'。所有这些重命名都是令人困惑的 –

+1

哦jeez ...我在编辑器中键入的每一个单词我必须致力于在SO中的一个新问题:D再次感谢:) p.s.我注意到在我导入mergeMap之后,我可以在代码中将它用作'flatMap'或'mergeMap' ... –

相关问题