2016-05-23 42 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';