40 votes

Syntaxe d'importation RXJS d'Angular 6 ?

Je suis en train de migrer une application Angular 5 vers la dernière CLI et Angular 6 RC et toutes mes importations d'Observable sont cassées. Je vois qu'Angular 6 change la façon dont les importations fonctionnent, mais je ne trouve aucune référence précise sur la façon dont la syntaxe fonctionne.

J'avais ça en 5 et ça marchait bien :

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

Maintenant, avec la nouvelle syntaxe, je vois que

import { Observable, Subject, throwError} from 'rxjs';
import { map } from 'rxjs/operators';

Les deux premières lignes compilent, mais je n'arrive pas à comprendre comment obtenir catch et throw par exemple. .map() génère également une erreur de compilation lorsqu'il est utilisé dans le code.

Quelqu'un a-t-il une référence sur la façon dont cela est censé fonctionner ?

1 votes

Je ne sais pas si c'est ce que vous demandez, mais vous devez remanier le code lui-même, si ce n'est déjà fait. Il y a le nouveau pipe syntaxe. Quelque chose comme par exemple yourObservable$.pipe(map(val => val * 2)).subscribe() . Donc avec ce type d'importation, vous n'utiliserez pas yourObservable$.map(blah) . Voici quelques références : blog.angularindepth.com/

1 votes

24voto

Suraj Rao Points 23390

De rxjs 5.5 , catch a été renommé en catchError pour éviter les conflits de noms.

Comme les opérateurs sont disponibles indépendamment d'un Observable, les noms des opérateurs ne peuvent pas entrer en conflit avec les restrictions des mots-clés JavaScript. Par conséquent, les noms de la version "pipeable" de certains opérateurs ont changé.

import { catchError } from 'rxjs/operators';

Pour throw vous pouvez utiliser ErrorObservable .

import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
ErrorObservable.create(new Error("oops"));

rxjs 6

Au lieu de ErrorObservable, utilisez throwError .

 import { throwError } from 'rxjs'
 throwError(new Error("oops"));

De plus, vous devrez désormais canaliser les opérateurs au lieu de les enchaîner directement à l'observable.

0 votes

Throw a un nouveau nom maintenant, c'est-à-dire throwError, et vous pouvez l'importer comme suit : import { throwError } de 'rxjs' ;

0 votes

Le fait de l'importer depuis 'rxjs' n'entraîne-t-il pas la reprise de l'ensemble du module ? Quel est le chemin plus spécifique pour l'importation ?

0 votes

@KeyvanSadralodabai pas dans le cas de rxjs v6. Apparemment, ils ont été modifiés selon este

11voto

Dash Points 127

Les tuyaux sont ce qui est requis pour le(s) opérateur(s) à l'avenir.

version : rxjs 6.0.1

Exemple :

import { Observable } from "rxjs";
import { map } from "rxjs/operators";

Observable.create((observer: any) => {
    observer.next('Hello')
}).pipe(map((val: any) => val.toUpperCase()))
  .subscribe((x: any) => addItem(x))

function addItem(val: any) {
    console.log('val', val);
}

//output - (In uppercase)
HELLO

5voto

Pian0_M4n Points 117

Ou si vous voulez continuer à utiliser la version 6.0.0 vous le faites

npm i --save rxjs-compat

pour ajouter la compatibilité inverse

0 votes

Il semblerait que vous puissiez faire une mise à jour de l'application pour que cela soit ajouté automatiquement (ainsi que la mise à jour des références du projet Angular à la dernière version).

0 votes

Il n'y a pas ng upgrade commandement. ng update vous voulez dire qu'il n'ajoute pas le paquet

5voto

user8152243 Points 51

Exécutez ces 2 commandes après avoir exécuté ng update . Cela devrait corriger les importations rxjs :

  1. npm i -g rxjs-tslint
  2. rxjs-5-to-6-migrate -p src/tsconfig.app.json

Références :

1 votes

Comment peut-on obtenir rxjs-5-to-6-migrate dans une variable PATH ? Après avoir exécuté npm i -g rxjs-tslint puis exécutez rxjs-5-to-6-migrate Je reçois rxjs-5-to-6-migrate is not recognized as an internal or external command

0voto

vishal Points 51

Il suffit d'importer les opérateurs suivants

import { Observable } from 'rxjs';
import { map, catchError, timeout } from 'rxjs/operators';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X