Zur Laufzeit, hier in Chrome, schlägt der Code fehl mit:
ReferenceError: Cannot access 'Vehicule' before initialization
at Module.Vehicule (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:10559:100)
at Module../src/app/domain/models/VehiculeGpsBoxInfo.ts (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:11156:69)
at __webpack_require__ (https://localhost:44338/runtime.js:84:30)
at Module../src/app/domain/models/Vehicule.ts (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:10571:78)
at __webpack_require__ (https://localhost:44338/runtime.js:84:30)
at Module../src/app/components/dispositifsDATI/mainDATI/listDATI/listDATI.component.ts (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:6447:82)
at __webpack_require__ (https://localhost:44338/runtime.js:84:30)
at Module../src/app/components/dispositifsDATI/index.ts (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:3053:95)
at __webpack_require__ (https://localhost:44338/runtime.js:84:30)
at Module../src/app/components/dispositifsDATI/dispositifsDATI.routes.ts (https://localhost:44338/src-app-components-dispositifsDATI-dispositifsDATI-module.js:2982:64)
Ich musste es5 in es6 ändern, um dieses andere Problem zu lösen.
BEARBEITEN: Die Datei VehiculeGpsBoxInfo.ts importiert Fahrzeuge wie folgt:
import { Vehicule } from "./Vehicule";
EDIT 2: Ich würde sagen, dass dies möglicherweise mit dem Webpack zusammenhängt, der Art und Weise, wie Module in den generierten Modulen exportiert/importiert werden.
EDIT 3: Nach weiteren Recherchen scheint dies nichts mit dem oben gezeigten Code zu tun zu haben. Habe eine neue Frage zu Webpack und ES6 gestartet.
Ist es gültig? return etwas in einem constructor?
– jlang
31. Okt. 2019 um 10:08
@jlang Bitte sehen Sie sich das an
– Olivier MATROT
31. Okt. 2019 um 10:32 Uhr
Ich hatte dieses Problem und fand heraus, dass bei einem Dienst, den ich injizierte, einige Injektionsanbieter fehlten. Überprüfen Sie Ihren Baum
– Polyterativ
11. Mai 2022 um 12:16 Uhr
Ich habe diesen Fehler aufgrund einer zirkulären Abhängigkeit erhalten
A mit B injiziert
B mit C injiziert
C mit A injiziert
Durch das Entfernen der zirkulären Abhängigkeit wurde dieser Fehler behoben.
Das ist auf jeden Fall relevant und hat mir geholfen, mein Problem herauszufinden. In meinem Fall hatte ich einen von ModulA bereitgestellten Dienst S, der intern und von ModulB verwendet wurde (der ModulA nicht importierte). Das war nicht ganz das Problem, sondern vielmehr, dass der Dienst S stattdessen von ModuleC hätte bereitgestellt werden sollen.
– Gui Brunow
10. November 2020 um 23:55 Uhr
Ich hatte auch eine zirkuläre Abhängigkeit. Nachdem ich das Problem behoben hatte, war alles wieder in Ordnung. Danke
Hallo, gibt es einen Grund, warum emitDecoratorMetadata wahr sein muss?
Diese TypeScript-Option weist eine grundlegende Designbeschränkung bei ES2015+-Code auf und sollte bei der Ausrichtung auf eine solche Ausgabe am besten vermieden werden. Daher handelt es sich hier um ein Problem mit TypeScript selbst und nicht mit Angular.
Angular 8+ erfordert diese Option nicht mehr. Bisher war es auch nur für den JIT-Modus erforderlich, der normalerweise nur in der Entwicklung verwendet wird.
Die Lösung ist zu setzen "emitDecoratorMetadata": false in Ihrer tsconfig.json-Datei.
Randnotiz: Ich muss sagen, dass frühere Versionen der Angular-CLI automatisch hinzugefügt wurden emitDecoratorMetadata: trueund es gibt keinen Grund, warum ein Entwickler das wissen sollte emitDecoratorMetadata sollte jetzt sein falseEs ist ziemlich schrecklich, dass das Angular-Team im Grunde gesagt hat: „Das ist nicht unser Problem“ und das Problem ohne Maßnahmen abgeschlossen hat. Dies hätte durch Hinzufügen einer besseren Dokumentation leicht „behoben“ werden können (wie von jemandem in der verlinkten Ausgabe hervorgehoben).
Beachten Sie, dass dieser Fehler auch durch die Definition von zwei öffentlichen verursacht werden kann @Injectable Klassen innerhalb derselben .ts Datei.
Ich bin mehr als einmal darüber gestolpert, als ich nur lokal Prototypen erstellte (insbesondere, wenn ich einen Dienst in mehrere umgestaltete).
Einstellung emitDecoratorMetadata: false behebt auch diese Situation; Aber für den Fall, dass Sie es eilig haben, etwas zu reparieren, oder keine Lust haben, damit herumzuspielentsconfig.json Datei in einem großen Projekt – es ist nützlich zu wissen, dass Sie das Problem möglicherweise beheben können, indem Sie einfach eine der Klassen in eine neue Datei verschieben.
Wow, du hast mir das Leben gerettet, ich hatte das Problem und es lag an einer öffentlichen Injektion innerhalb der .ts-Datei der Komponente.
– Logan Wlv
18. August 2022 um 15:59 Uhr
Ja, schuldig. Uhlala.
– Théo T. Carranza
23. Januar um 9:15 Uhr
Benutzer1568220
um zirkuläre Abhängigkeiten zu finden:
npx madge –circular –extensions ts ./
(vorher bauen)
Ich bin aufgrund der Reihenfolge meiner Importanweisungen im Modul darauf gestoßen. Vor der Komponente musste eine Datei importiert werden, die auch auf die Komponente zugreift.
Das war es für mich. Vielen Dank, dass Sie dies in die Antworten geworfen haben!
– tuffant21
30. August 2022 um 19:07 Uhr
Das war es für mich. In meinem Fall habe ich im VS-Code die Verknüpfung „Importe organisieren“ vorgenommen und einige Dienste wurden vor der AppComponent in main.ts importiert. Das Problem wurde dadurch gelöst, dass AppComponent zuerst angezeigt wurde.
– aosaimy
25. April um 22:13
Das hat mir geholfen, obwohl in meinem Fall die Fehlerquelle in meiner Bibliothek lag und ich einfach die Direktive, die den Fehler verursachte, an den Anfang ihrer Datei verschoben habe. Ich wette, ich hätte auch die Exportreihenfolge in den public-api.ts ändern können. Ich kann nicht glauben, dass es funktioniert hat … scheint flockig zu sein.
– AndrewBenjamin
30. April um 15:29
Hadrien TOMA
In Angular 8, mit entryComponents als leere Liste in einem SharedModule deklariert, verursachte bei mir dieses Problem:
entryComponents: []
Nach dem Entfernen entryComponentsalles hat gut funktioniert.
Das war es für mich. Vielen Dank, dass Sie dies in die Antworten geworfen haben!
– tuffant21
30. August 2022 um 19:07 Uhr
Das war es für mich. In meinem Fall habe ich im VS-Code die Verknüpfung „Importe organisieren“ vorgenommen und einige Dienste wurden vor der AppComponent in main.ts importiert. Das Problem wurde dadurch gelöst, dass AppComponent zuerst angezeigt wurde.
– aosaimy
25. April um 22:13
Das hat mir geholfen, obwohl in meinem Fall die Fehlerquelle in meiner Bibliothek lag und ich einfach die Direktive, die den Fehler verursachte, an den Anfang ihrer Datei verschoben habe. Ich wette, ich hätte auch die Exportreihenfolge in den public-api.ts ändern können. Ich kann nicht glauben, dass es funktioniert hat … scheint flockig zu sein.
– AndrewBenjamin
30. April um 15:29
Hamidreza Vakilian
Zirkuläre Abhängigkeit ist der Teufel!
Dies führt dazu, dass die gesamte Abhängigkeitsschleife vom Compiler nicht aufgelöst werden kann. In den meisten Fällen sehen die Fehler so aus, als würden Sie die Klassen überhaupt nicht importieren.
Manche denken vielleicht, dass zirkuläre Abhängigkeiten nur in Diensten und Modulen verhindert werden sollten. Zirkuläre Abhängigkeiten sollten jedoch in allen Formen verhindert werden, sogar in Modellen, Komponenten und Klassen.
Wenn Sie eine zirkuläre Abhängigkeit haben, ist das ein Zeichen dafür, dass Sie (früher oder später) Ihren Code umgestalten und neu strukturieren müssen. Die folgenden Hinweise können dabei hilfreich sein. Angenommen, wir möchten die zirkuläre Abhängigkeit zwischen zwei Klassen A, B beseitigen.
Lösung 1: Vereinigung/Zusammenführung
A und B folgen demselben Konzept und können zu einer einzigen Klasse zusammengeführt werden.
Lösung 2: Trennung/Erschaffung
Es sollte eine neue Klasse C geben, auf die sich sowohl A als auch B verlassen oder die irgendwo zwischen diesen beiden liegt.
Meiner Erfahrung nach entsteht die zirkuläre Abhängigkeit in den meisten Fällen, weil der Entwickler dazu neigt, n Logiken in k (k
Deshalb verzichten alle auf Angular
– Dina fliegt
6. Januar um 12:58
@DinaFlies Zirkuläre Abhängigkeiten zwischen Modulen gelten aufgrund ihrer negativen Auswirkungen unabhängig von der Plattform als Anti-Pattern. Es geht also nicht um Winkel oder eine bestimmte Plattform.
– Hamidreza Vakilian
7. Januar um 12:38
Ich habe den Teil verpasst, den ich erwähnt habe, zirkuläre Abhängigkeiten. Während der Umgang mit Modulen bei Angular besonders komplex ist, importieren andere Frameworks ihre Komponenten einfach dort, wo sie benötigt werden.
– Dina fliegt
7. Januar um 17:25 Uhr
14530700cookie-checkAngular: 7.2.1 ES6-Klasse ReferenceError: Auf „X“ kann vor der Initialisierung nicht zugegriffen werdenyes
Ist es gültig?
return
etwas in einemconstructor
?– jlang
31. Okt. 2019 um 10:08
@jlang Bitte sehen Sie sich das an
– Olivier MATROT
31. Okt. 2019 um 10:32 Uhr
Ich hatte dieses Problem und fand heraus, dass bei einem Dienst, den ich injizierte, einige Injektionsanbieter fehlten. Überprüfen Sie Ihren Baum
– Polyterativ
11. Mai 2022 um 12:16 Uhr