Angular 角静校正误差
我正在写一个需要包装的库 所有内容(库和用户应用程序)都可以正常编译,但在浏览器中运行时,我遇到以下错误:Angular 角静校正误差,angular,typescript,Angular,Typescript,我正在写一个需要包装的库 所有内容(库和用户应用程序)都可以正常编译,但在浏览器中运行时,我遇到以下错误: ERROR Error: StaticInjectorError[InjectionToken DocumentToken]: StaticInjectorError[InjectionToken DocumentToken]: NullInjectorError: No provider for InjectionToken DocumentToken! at _
ERROR Error: StaticInjectorError[InjectionToken DocumentToken]:
StaticInjectorError[InjectionToken DocumentToken]:
NullInjectorError: No provider for InjectionToken DocumentToken!
at _NullInjector.get (core.js:993)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveNgModuleDep (core.js:10878)
at _createClass (core.js:10919)
at _createProviderInstance$1 (core.js:10889)
缩写代码:
库模块:为我的库定义NgModule
,导入所需的OAuthModule
和HttpClientModule
。定义我的SomeService
服务
@NgModule({
imports: [ HttpClientModule, OAuthModule.forRoot() ],
providers: [ SomeService ]
})
export class SomeModule {}
库服务:最简单的例子是,只实例化OAuthService
@Injectable()
export class SomeService {
constructor(private oauth: OAuthService) {}
}
消费者应用程序模块:只需将我的库作为SomeModule
导入即可
@NgModule({
...
imports: [ SomeModule ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
使用者组件:尝试调用my library中的SomeService
服务,从而产生错误
- 库和应用程序都编译无误
- 当我在浏览器中打开应用程序时,会出现上面提到的错误
- 如果我从库导入中删除
,它会说我缺少HttpClientModule
,而不是上面的错误HttpClient
- 图书馆是用塑料建造的
- 应用程序是使用
@angular/cli
- 让应用程序也导入OAuthModule
- 在库中删除
上的OAuthModule.forRoot()
,意味着库无法访问.forRoot()
OAuthModule
- 将库更改为同时使用
,并使用.forRoot()
阵列中的几乎所有服务组合(在自身、OAuthService和HttpClientService之间)提供程序
- 将网页包配置更改为不将@angular/*列为外部
- 更改webpack配置以将OAuth库列为外部
- 使用rollup而不是webpack,从两个单独的种子项目配置
- 更多的事情可以归结为抓救命稻草
HttpClientModule
,我已经这样做了,但没有效果
我发现正好有一个其他人使用“DocumentToken”得到此错误的实例。他们在中修复了自己的库,这似乎只是在汇总配置中添加了更多的外部内容。虽然我的库使用webpack,但它用于确保所有@angular/*包都列为外部包
任何帮助或想法都将不胜感激
(Angular 5,TypeScript 2.6.2)您应该在
SomeModule
声明中声明AppComponent
,或者在AppModule
中提供SomeService
。至少试一下,我可能会弄错:)不幸的是,AppComponent
和SomeModule
存在于不同的项目中。AppComponent
是应用程序的一部分,SomeModule
是库NgModule。是否使用aot构建?可能是OAuthModule不支持它。我不太擅长理解angular Underhood,但可能是AppComponent
试图使用SomeService
,但由于它是外部服务,所以无法加载,或者类似的东西。如果可能,请尝试将SomeService
添加到AppModule
提供程序中,并查看这是否解决了错误。有关DocumentToken的唯一信息在CommonModule源代码中。因此,您必须在模块中导入。[公共模块中的文档DI源][1][1]:
@Component({ ... })
export class AppComponent {
constructor(
private someService: SomeService
) {}
}