Ale*_*lor 58 typescript angular
这是我在Angular/TypeScript应用程序中遇到的一个无用的错误.在有人更好地提出错误消息之前,我们可以做些什么呢?导致这种情况发生的最可能的情况是什么?
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
...
Run Code Online (Sandbox Code Playgroud)
Oph*_*sky 46
从错误消息中很难判断哪个提供程序导致此问题.我设法调试它的方式如下:
Ale*_*lor 22
一种可能性是尝试在同一文件中声明服务和模块,并在服务之前声明模块:
import {Injectable, NgModule} from '@angular/core';
@NgModule({providers: [FooService]}) // WRONG: used before declared
export class FooModule {
}
@Injectable()
export class FooService {
}
Run Code Online (Sandbox Code Playgroud)
您可以通过首先声明服务来解决此问题,或者您可以forwardRef像这样使用:
import {forwardRef, Injectable, NgModule} from '@angular/core';
@NgModule({providers: [forwardRef(() => FooService)]})
export class FooModule {
}
@Injectable()
export class FooService {
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我还没有对/sf/answers/3591309991/发表评论的声誉, 但最好添加以下内容:
console.error('\ntype: ', type, '\nproviders: ', (providers || []).map(p => p && (p.name || p.useClass || p.useValue || p.useFactory || p.useExisting)));
Run Code Online (Sandbox Code Playgroud)
它将显示有问题的提供者列表和模块,因此您可以打开它,并检查此提供者列表:标记为未定义的列表 - 应该修复
小智 5
我在使用 ng-packagr 打包库然后将其导入另一个库时遇到了这个问题。最终成为我的问题的确实是“桶” index.ts 进口。
这让它崩溃了
import { Activate, Another, Data } from './services
@NgModule({ providers: [ Activate, Another, Data ]})
Run Code Online (Sandbox Code Playgroud)
在 services 文件夹中,我有一个 index.ts 文件可以导出所有服务。
这修复了它:
import { Activate } from './services/activate.service.ts'
import { Another} from './services/another.service.ts'
import { Data } from './services/data.service.ts'
@NgModule({ providers: [ Activate, Another, Data ]})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58713 次 |
| 最近记录: |