Angular 2导入Observable的共享运算符

时间:2016-05-23 20:46:32

标签: import angular rxjs observable

我正在尝试将shared运算符用于Observers,但它不起作用:

我的代码:

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不是函数。

在其他情况下,我成功导入了例如map运算符,并正常使用如下:

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);中我也会遇到相同的错误。

2 个答案:

答案 0 :(得分:5)

iuristona的答案有效,但仅仅是因为您正在导入整个图书馆:

import { Observable } from 'rxjs/Rx';

仅从'rxjs / Observable&#39;导入模块,你只导入一些方法。移动用户将欣赏只导入您需要的方法而不是整个库。你可以这样做:

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

希望有所帮助。

答案 1 :(得分:2)

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

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