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);
}
}
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.
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
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'
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. ;)
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
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/*"]
},
}
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
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.
Winkel 7 und RxJS 6+
import { Observable } from 'rxjs'
import { tap, map, switchMap, catchError } from 'rxjs/operators'
Alle Operatoren sind jetzt in rxjs/operators
.
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.