it-swarm.com.de

rXJS kann nicht aufgelöst werden

Fehler beim Kompilieren.

./src/app/hero.service.ts Modul nicht gefunden: Fehler: .__ kann nicht aufgelöst werden. 'rxjs/Observable/of' in 'C:\Users\Admin\angle\myheroes\src\app'

@ ./src/app/hero.service.ts 13:11-40 
@ ./src/app/app.module.ts 
@ ./src/main.ts 
@ multi webpack-dev-server/client?http://0.0.0.0:0 ./src/main.ts

mein Code für hero.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { of } from 'rxjs/Observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { MessageService } from './message.service';

@Injectable()
export class HeroService {

   constructor(private messageService: MessageService) { }

  getHeroes(): Observable<Hero[]>

  {
    // todo: send the message _after_fetching the heroes
    this.messageService.add('HeroService: fetched heroes');
    return of (HEROES);
  }
}
10
Bhavin

Normalerweise haben Sie in Ihrem Projekt eine Datei namens rxjs-operators.ts, die die benötigten Teile von rxjs importiert. Sie sollten diese Zeile zu dieser Datei hinzufügen:

import 'rxjs/add/observable/of';

Nehmen Sie auch diese Zeile heraus:

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

Alternativ können Sie es auch direkt in Ihr Modul importieren und prüfen, ob es funktioniert.

9
Steve D

Ich habe diesen Fehler wegen einer älteren Version von Rxjs erhalten und Angular 6 benötigt die neueste Version von Rxjs. 

Dieser Befehl installiert die neueste Version, die mit Angular 6 kompatibel ist.

npm install --save rxjs-compat
25
Vedha Peri

Wie Aravind in seinen Kommentaren darauf hingewiesen hat, ist der Fall hier wichtig. Anstatt

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

versuchen...

import { of } from 'rxjs/observable/of';  // note the lower-cased 'o' on 'observable'
18
Adam Cox

Für diejenigen von Ihnen, die am 13. Juli noch am Leben sind, ist der korrekte Weg zum Importieren des Moduls folgendermaßen:

import { Observable, of } from 'rxjs';

Ich bin mir ziemlich sicher, dass aufgrund falscher Namenskonventionen, die auf einen O-Großbuchstaben und einen Kleinbuchstaben-O-Ordner zugreifen, diese in einer umfassenderen Weise enthalten sind.

Hinweis: DIESE IS DIE ENTLÜFTUNGSKANTE. ;)

7
abejdaniels

Ich habe das gleiche Problem und habe das Problem wie folgt behoben ...

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

Wo wird verwendet:

Observable.of(something)

Hinweis: Wichtig immer einen Blick in npm rxjs zu werfen, dort finden Sie die Dokumentation zur aktuellen Version

2
jesusperaltac
import { Injectable } from '@angular/core';

import { Observable } from 'rxjs/Observable';

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

import { Hero } from './hero';

import { HEROES } from './mock-heroes';

Stellen Sie immer sicher, dass die Reihenfolge der Verweise auf die Dateien in der richtigen Reihenfolge liegt. 

Ich habe den gleichen Fehler für "angle/core" und "rxjs". Dies ist die Art und Weise, wie ich das Problem behebe, indem ich dem Compiler explizit sagte, wo er die Bibliothek findet: 

"compilerOptions": {
  "paths": { 
    "@angular/*": ["../../node_modules/@angular/*"],
    "rxjs/*": ["../../node_modules/rxjs/*"]
  },
}
1
Alain

Die nächsten Schritte funktionieren für mich.

1) Importiere von Operator

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

2) Installieren Sie das Paket rxjs-compat

$ npm i --save rxjs-compat
0
Alex Chaliy

In meinem Fall habe ich den Fehler wegen des Pfads von rxjs in webpack.config.js erhalten.

Ich habe das Projekt unter C-Laufwerk mit angle-cli erstellt und mit ng eject das Projekt ausgeworfen und die webpack.config.js generiert.

Eigentlich angle-cli injiziere einen absoluten Pfad für rxjs wie folgt:

"alias": {
      "rxjs/observable/of": "C:\\my_project_directory\\node_modules\\rxjs\\_esm5\\observable\\of.js"

...}

Nach der manuellen Korrektur auf einen relativen Pfad

"alias": {
      "rxjs/observable/of": "rxjs\\_esm5\\observable\\of.js"

.. }

Es fing an zu arbeiten.

0
user1741742

Winkel 7 und RxJS 6+

import { Observable } from 'rxjs'
import { tap, map, switchMap, catchError } from 'rxjs/operators'

Alle Operatoren sind jetzt in rxjs/operators.

0
Alexander Kim

Die Antworten auf diese Frage sind widersprüchlich, die Frage ist gut, aber es gibt keine Antwort, die wirklich hilfreich ist.

Das hat alles mit der Änderung der API von Rxjs seit Version 6.0 zu tun

Die Antworten hier sind verwirrend aufgrund der verschiedenen Versionen von RxJs, das ist das Problem. Eine Antwort, die beginnt oder endet mit: "Das funktioniert für mich" ist nutzlos, da dies keine Antwort ist, das ist ein Beispiel, wie es funktionieren könnte, aber Sie haben nie die vollständige Geschichte, daher ist es nutzlos, weil es nichts erklärt .

Alles wird hier sehr gut erklärt: https://academind.com/learn/javascript/rxjs-6-what-changed/ Wenn Sie 12 Minuten haben, wird es auch in erklärt dieses Youtube: https://www.youtube.com/watch?v=X9fdpGthrXA

Ich weiß, dass externe Links in StackOverflow nicht geschätzt werden, und das aus gutem Grund, und obwohl es nicht sehr viel zu wissen ist, ist das eine Erklärung für eine kurze und hilfreiche Antwort.

Kurz gesagt, das Problem hat mit den Unterschieden zwischen der Rxjs-API vor Version 6.0 und seit RxJs 6.0 zu tun. Wenn Sie den Code vor Version 6.0 unverändert lassen möchten, sollten Sie rxjs-compat installieren. Dies ist nicht sehr Schlecht

Besser ist es, den Code zu ändern und aktuell und bereit für die Zukunft zu sein.

0
Bert Verhees