angular - Feil: "Møtte udefinert leverandør! Vanligvis betyr dette at du har sirkulære avhengigheter"
Her er en litt ubrukelig feil jeg får i Angular/TypeScript-applikasjonen min. Inntil noen gjør feilmeldingen bedre, hva kan vi gjøre med dette? Hva er de mest sannsynlige situasjonene som får dette til å skje?
Uncaught Error: Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files.
at Object.syntaxError
at eval at Array.forEach (native) [<root>]
at CompileMetadataResolver._getProvidersMetadata
at CompileMetadataResolver.getNgModuleMetadata
at CompileMetadataResolver.getNgModuleSummary
at eval
...
Svar #1
Det er veldig vanskelig å vite ut fra feilmeldingen hvilken leverandør som forårsaker dette problemet. Måten jeg klarte å feilsøke dette på er følgende:
- Jeg gikk inn i node_modules@angular\compiler\bundles\compiler.umd.js-filen
- Jeg fant linjen der det står: "Oppdaget udefinert leverandør! Dette betyr vanligvis at du har sirkulære avhengigheter. Dette kan være forårsaket av bruk av 'barrel' index.ts-filer."
- En linje før la jeg til
console.log('type', type);for å se i hvilken fil den udefinerte provideren er (Du kan også logge andre relevante variabler der). - I den relevante filen fant jeg 'barrel'-importen som forårsaket problemet, og erstattet den med import av eksakt filsti.
Svar #2
For meg, jeg bare starter ng serve på nytt
Svar #3
En mulighet er å prøve å deklarere en tjeneste og modul i samme fil, og deklarere modulen før tjenesten:
import {Injectable, NgModule} from '@angular/core';
@NgModule({providers: [FooService]}) // WRONG: used before declared
export class FooModule {
}
@Injectable()
export class FooService {
}
Du kan fikse dette ved å deklarere tjenesten først, eller du kan bruke forwardRef slik:
import {forwardRef, Injectable, NgModule} from '@angular/core';
@NgModule({providers: [forwardRef(() => FooService)]})
export class FooModule {
}
@Injectable()
export class FooService {
}
