J'ai des problèmes avec l'importation de la fonction Observable.of
dans mon projet. Mon Intellij voit tout. Dans mon code j'ai:
import {Observable} from 'rxjs/Observable';
et dans mon code je l'utilise comme ça:
return Observable.of(res);
Des idées?
En fait, j'ai des importations gâchées. Dans la dernière version de RxJS, nous pouvons l'importer comme ça:
import 'rxjs/add/observable/of';
Si quelqu'un rencontre ce problème lors de l'utilisation de Angular 6/rxjs 6, consultez les réponses ici: Impossible d'utiliser Observable.of dans RxJs 6 et Angular 6
En bref, vous devez l'importer comme ceci:
import { of } from 'rxjs';
Et puis au lieu d'appeler
Observable.of(res);
juste utiliser
of(res);
Bien que cela semble absolument étrange, il importait pour moi de capitaliser le "O" dans le chemin d'importation de import {Observable} from 'rxjs/Observable
. Le message d'erreur avec observable_1.Observable.of is not a function
reste présent si j'importe l'observable de rxjs/observable
. Étrange mais j'espère que ça aide les autres.
Ma bêtise est d’oublier d’ajouter /add
à la demande de l’observable.
était:
import { Observable } from 'rxjs/Observable';
import 'rxjs/observable/of';
Ce qui semble visuellement correct parce que le fichier rxjs/observable/of
existe, en fait.
devrait être:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
Si vous utilisez Angular 6/7
import { of } from 'rxjs';
Et puis au lieu d'appeler
Observable.of(res);
juste utiliser
of(res);
Patching ne fonctionnait pas pour moi, peu importe la raison, j'ai donc dû recourir à cette méthode:
import { of } from 'rxjs/observable/of'
// ...
return of(res)
Juste pour ajouter,
si vous en utilisez beaucoup, vous pouvez tout importer en utilisant
import 'rxjs/Rx';
comme mentionné par @Thierry Templier. Mais je pense que si vous utilisez un opérateur limité, vous devez importer un opérateur individuel comme
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/of';
comme mentionné par @uksz.
Parce que 'rxjs/Rx' importera tous les composants Rx, ce qui coûte vraiment de la performance.
Vous pouvez également importer tous les opérateurs de cette manière:
import {Observable} from 'rxjs/Rx';
J'utilise Angular 5.2 et RxJS 5.5.6
Ce code n'a pas fonctionné not :
import { Observable,of } from 'rxjs/Observable';
getHeroes(): Observable<Hero[]> {
return of(Hero[]) HEROES;
}
Le code ci-dessous a fonctionné:
import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';
getHeroes(): Observable<Hero[]>
{
return Observable.create((observer: Subscriber<any>) => {
observer.next(HEROES);
observer.complete();
});
}
Méthode d'appel:
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
Je pense qu'ils pourraient déplacer/changer la fonctionnalité de () dans RxJS 5.5.2
Amélioré de Angular 5/Rxjs 5 à Angular 6/Rxjs 6?
Vous devez modifier vos importations et votre instanciation. Découvrez le blog de Damien
Tl; dr:
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": "^5.5.10"
import { of } from 'rxjs/observable/of';
....
return of(res)
Cela devrait fonctionner correctement juste l'essayer.
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
Pour Angular 5+:
import { Observable } from 'rxjs/Observable';
devrait fonctionner. Le package de l'observateur doit également correspondre à l'importation import { Observer } from 'rxjs/Observer';
si vous utilisez des observateurs
import {<something>} from 'rxjs';
fait une énorme importation, il est donc préférable de l'éviter.
RxJS 6
Lors de la mise à niveau vers la version 6 de la bibliothèque RxJS
sans utiliser le package rxjs-compat
, le code suivant
import 'rxjs/add/observable/of';
// ...
return Observable.of(res);
doit être changé en
import { of } from 'rxjs';
// ...
return of(res);
J'ai eu ce problème aujourd'hui. J'utilise systemjs pour charger les dépendances.
Je chargeais les Rxjs comme ceci:
...
paths: {
"rxjs/*": "node_modules/rxjs/bundles/Rx.umd.min.js"
},
...
Au lieu d'utiliser des chemins, utilisez ceci:
var map = {
...
'rxjs': 'node_modules/rxjs',
...
}
var packages = {
...
'rxjs': { main: 'bundles/Rx.umd.min.js', defaultExtension: 'js' }
...
}
Ce petit changement dans la façon dont systemjs charge la bibliothèque a résolu mon problème.
Pour moi (Angular 5 & RxJS 5), l’importation autocomplete suggérait:
import { Observable } from '../../../../../node_modules/rxjs/Observable';
tandis que devrait être (avec tous les opérateurs statiques from
, of
, e.c.t fonctionne bien:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
montre une exigence de rxjs-compat
require("rxjs-compat/add/observable/of");
Je ne l'avais pas installé. Installé par
npm install rxjs-compat --save-dev
et relancer corrigé mon problème.
Dans rxjs
v6, l'opérateur of
doit être importé sous le nom import { of } from 'rxjs';
En quelque sorte, même Webstorm l'a fait comme ceci import {of} from 'rxjs/observable/of';
et tout a commencé à fonctionner