Angular 6提供的不起作用 - > StaticInjectorError

SIA*_*UTA 10 angular

我正在尝试在Angular中使用'providedin'功能,但收到错误"StaticInjectorError(AppModule)[DashboardComponent - > DashboardService]:"

@Injectable({
  providedIn: DashboardModule
})
export class DashboardService {
  getContent() {
    return 'Dashboard Service works!!!';
  }
}
Run Code Online (Sandbox Code Playgroud)

完整演示https://stackblitz.com/edit/angular-kbkjet 感谢您的努力!

Deb*_*ahK 7

  • 98%的时间,使用providedIn ='root'.它将使用根应用程序注入器注册服务,将树动摇,并且可供任何需要它的组件使用.树摇动将确保服务仅包含在使用它的捆绑中.
  • 如果只需要在组件及其嵌套子级中提供服务,请在组件中使用providers数组.(对于组件级别的服务隔离,或者每个组件需要多个服务实例.)
  • 不要在模块中使用providers数组(这是旧语法,不再推荐)
  • 如果要限制对特定延迟加载模块的服务的访问,请使用providedIn ='lazymodule'.然后,它将需要一个额外的模块来防止循环依赖问题.这在模块级别提供服务隔离.如果此延迟加载模块之外的应用程序中的任何其他组件尝试引用该服务,则会生成"超出注入范围"错误.

有关"附加模块"的更多信息,请参阅此处:https://www.youtube.com/watch?v = jigR_jBhDMs&feature = youroutu.be

示例代码:https://github.com/web-dave/provide-in-test

这里讨论循环依赖问题:https://github.com/web-dave/provide-in-test/issues/1


SIA*_*UTA -3

最后我找到了解决方案: https: //angular.io/guide/providers#providedin-and-ngmodules 模块的提供者部分中也应该提到服务。

@NgModule({
  imports: [CommonModule],
  declarations: [DashboardComponent],
  exports: [DashboardComponent],
  providers: [DashboardService]
})
Run Code Online (Sandbox Code Playgroud)

演示已更正。感谢你们!