2016-05-23 76 views
2

我試圖使用shared運營商觀察員,但它不工作:角2進口共享運營商可觀察

我的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);我得到相同的錯誤。

+0

您是否從TSC或WebStorm等IDE收到此錯誤?如果來自TSC,也許嘗試更新到打字稿的最新版本。如果來自WS,那麼應該在下一個補丁中解決rxjs observables的運算符導入問題:https://youtrack.jetbrains.com/issue/WEB-20992#u=1458951972769 – awiseman

+0

在瀏覽器中,當我運行應用程序 – iuristona

+0

您使用的是哪種運行時轉換器和版本? – awiseman

回答

4

iuristona的答覆工作,但只是因爲你要導入的整個庫:

import { Observable } from 'rxjs/Rx'; 

通過僅從'rxjs/Observable'模塊導入,您只導入了一些方法。移動用戶只會喜歡導入所需的方法,而不是整個庫。你可以這樣做:

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

希望有所幫助。

2

所以,我不知道爲什麼,但是當我從'rxjs/Rx'進口,它的工作原理:

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