我有导入可观察对象的问题。在我的项目中的作用。我的Intellij能看到一切。在我的代码中我有:

import {Observable} from 'rxjs/Observable';

在我的代码中,我这样使用它:

return Observable.of(res);

什么好主意吗?


实际上我把导入弄乱了。在最新版本的RxJS中,我们可以像这样导入它:

import 'rxjs/add/observable/of';

你也可以这样导入所有的操作符:

import {Observable} from 'rxjs/Rx';

我今天遇到了这个问题。我使用systemjs加载依赖项。

我像这样加载Rxjs:

...
    paths: {
        "rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
    },
...

使用下面的语句代替使用路径:

var map = {
...
'rxjs':                       'node_modules/rxjs',
...
}

var packages = {
...
'rxjs': { main: 'bundles/Rx.umd.min.js', defaultExtension: 'js' }
...
}

systemjs加载库方式的这个小改变解决了我的问题。


虽然这听起来很奇怪,但对我来说,从'rxjs/Observable '导入{Observable}的导入路径中大写'O'很重要。带有observable_1.Observable的错误消息。of不是一个函数,如果我从rxjs/ Observable导入Observable。很奇怪,但我希望它能帮助到其他人。


补充一点,

如果你正在使用很多,那么你可以导入所有使用

import 'rxjs/Rx'; 

正如@Thierry Templier所提到的。但我认为,如果你使用的是有限算子,那么你应该导入单个算子,比如

import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';

正如@uksz提到的。

因为'rxjs/Rx'将导入所有的Rx组件,这绝对具有性价比。


不管出于什么原因,补丁对我来说不起作用,所以我不得不求助于以下方法:

import { of } from 'rxjs/observable/of'

// ...

return of(res)

我的愚蠢错误是在需要可观察对象时忘记了add /add。

Was:

import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';

这看起来没问题,因为rxjs/observable/of file实际上是存在的。

应该是:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

对于Angular 5+:

import {Observable} from 'rxjs/Observable';观察者包应该匹配导入,并从'rxjs/ observer '导入{observer};如果你用的是观察器的话

从'rxjs'导入{<something>};是一个巨大的进口,所以最好避免它。


这应该可以正常工作,试试吧。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

// "rxjs": "^5.5.10"
import { of } from 'rxjs/observable/of';

.... 
return of(res)

甚至Webstorm也做了这样的import {of} from 'rxjs/observable/of'; 一切都开始运转起来


从Angular 5 / Rxjs 5升级到Angular 6 / Rxjs 6?

您必须更改导入和实例化。看看达米恩的博客文章

Tl; diana:

import { Observable, fromEvent, of } from 'rxjs';

const yourResult = Observable
    .create(of(yourObservable))
    .startWith(null)
    .map(x => x.someStringProperty.toLowerCase());

//subscribe to keyup event on input element
Observable
    .create(fromEvent(yourInputElement, 'keyup'))
    .debounceTime(5000)
    .distinctUntilChanged()
    .subscribe((event) => {
        yourEventHandler(event);
    });

RxJS 6

当升级到RxJS库版本6且不使用RxJS -compat包时,执行以下代码

import 'rxjs/add/observable/of';   
  // ...
  return Observable.of(res);

要改成什么

import { of } from 'rxjs';
  // ...
  return of(res);

import 'rxjs/add/observable/of';

显示rxjs-compat的需求

require("rxjs-compat/add/observable/of");

我没有安装这个。安装的

npm install rxjs-compat --save-dev

重新运行解决了我的问题。


我使用的是Angular 5.2和RxJS 5.5.6

这段代码不起作用:

     import { Observable,of } from 'rxjs/Observable';

     getHeroes(): Observable<Hero[]> {
        return of(Hero[]) HEROES;

      }

下面的代码可以工作:

    import { Observable } from 'rxjs/Observable';
    import { Subscriber } from 'rxjs/Subscriber';

     getHeroes(): Observable<Hero[]> 
     {
          return Observable.create((observer: Subscriber<any>) => {
              observer.next(HEROES);
              observer.complete();
          });

      }

调用方法:

this.heroService.getHeroes()
      .subscribe(heroes => this.heroes = heroes);

我认为他们可能移动/改变了RxJS 5.5.2中的()功能


在rxjs v6中,of操作符应从'rxjs'中导入import {of};


如果有人在使用Angular >= 6和rxjs版本6或更高版本时遇到了这个问题,请参阅这里的答案: 无法使用可观察对象。在RxJs 6和Angular 6中

简而言之,你需要像这样导入它:

import { of } from 'rxjs';

然后不是打电话

Observable.of(res);

只使用

of(res);

对我来说(Angular 5 & RxJS 5),自动完成导入建议:

import { Observable } from '../../../../../node_modules/rxjs/Observable';

而to应该是(所有来自,of, E.C.T的静态操作符都工作正常:

import { Observable } from 'rxjs/Observable';