Observable的Angular 2导入共享运算符



我正在尝试为Observer使用shared运算符,但它不起作用:

我的ts代码:

import { Injectable } from '@angular/core';
import { Observer } from 'rxjs/observer';
import { Observable } from 'rxjs/observable';
import 'rxjs/add/operator/share';
@Injectable()
export class LoadingService {
private _observer: Observer<string>;
loading$: Observable<string>;
constructor() {
this.loading$ = new Observable<string>(
observer => this._observer = observer).share();
}
toggleLoadingIndicator(name) {
if (this._observer) {
this._observer.next(name);
}
}
}

当我调用.share();时,我得到错误:TypeError:(中间值)。share不是一个函数。

在其他情况下,我成功导入例如地图操作员,并正常使用如下:

import 'rxjs/add/operator/map';
this._http.get(this._url, {
headers: this._headers
}).map(r => r.json()).subscribe(json => {
console.log(json);
this.isValid = true;
});

因此,即使我尝试使用map运算符来证明导入,在第一个场景this.loading$ = new Observable<string>(observer => this._observer = observer).map(n => n);中,我也会得到相同的错误。

iuristona的答案是有效的,但这只是因为您使用导入整个库

import { Observable } from 'rxjs/Rx';

通过只从"rxjs/ObsObable"模块导入,您只导入了其中的一些方法。移动用户只会喜欢导入您需要的方法,而不是整个库。你可以用

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/debounceTime';  // added method
import 'rxjs/add/operator/map';           // added method

希望能有所帮助。

所以,我不知道为什么,但当我从'rxjs/Rx'导入时,它起作用:

import { Observable, Observer } from 'rxjs/Rx';

最新更新