【问题标题】:Angular 2 import shared operator for ObservableObservable的Angular 2导入共享运算符
【发布时间】:2016-05-23 20:46:31
【问题描述】:

我正在尝试将 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: (intermediate value).share is not a function。

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

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&lt;string&gt;(observer =&gt; this._observer = observer).map(n =&gt; n); 我也会遇到相同的错误。

【问题讨论】:

  • 您是从 TSC 还是从 WebStorm 等 IDE 收到此错误?如果来自 tsc,也许尝试更新到最新版本的打字稿。如果来自 WS,则 rxjs observables 的操作符导入存在一个已知问题,应在下一个补丁中解决:youtrack.jetbrains.com/issue/WEB-20992#u=1458951972769
  • 在浏览器中,当我运行应用程序时
  • 您使用的是什么运行时转译器​​和版本?
  • BroccoliTypeScriptCompiler,角度 rc1

标签: import angular rxjs observable


【解决方案1】:

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';
    

    【讨论】:

      猜你喜欢
      • 2017-06-20
      • 2017-10-08
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2019-03-17
      • 2016-08-02
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多