【问题标题】:What is the choice forRoot vs @Injectable providedIn metadataRoot vs @Injectable 提供的元数据中的选择是什么
【发布时间】:2019-04-15 03:14:43
【问题描述】:

我可以使用 ModuleWithProviders forRoot 静态方法向根模块注册一些服务,因为这些服务在不同模块内的少数组件之间共享。

export class SharedModule {
    static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [ CounterService ]
    }
  }
}

但是使用 Angular 6,如果需要向根注入器注册服务,可以使用 @Injector 装饰器将提供的元数据设置为“根”来完成。

@Injectable({
  providedIn: 'root'
})
export class UserService {

}

那么什么方法应该是合适的意味着我应该遵循什么方法?

forRoot 也会过时吗??

模块中的 Provider 数组会发生什么?

【问题讨论】:

    标签: javascript angular angular6


    【解决方案1】:

    当一个模块同时提供声明和提供者时,它会在注入子时复制提供者实例,这会导致可能意味着单例的实例出现问题。 出于这个原因,Angular 提供了一种将提供程序从模块中分离出来的方法,以便可以将相同的模块导入到具有提供程序的根模块和没有提供程序的子模块中。

    【讨论】:

      【解决方案2】:

      providedIn 是创建单例的新语法(即在根注入器中声明的提供程序)。

      您可以在任何其他模块中提供它,但rootAppModule 的简写。

      它允许您非常快速地安装依赖项,而无需任何额外的配置。

      因此,forRoot 不会过时,因为它允许人们通过它配置模块。

      我想说你应该为你的提供者使用providedIn语法,如果他们需要配置,你可以使用forRoot

      【讨论】:

        猜你喜欢
        • 2018-11-23
        • 1970-01-01
        • 2016-04-04
        • 2016-10-22
        • 2021-05-11
        • 2020-06-08
        • 2017-08-01
        • 2012-04-03
        • 2019-12-03
        相关资源
        最近更新 更多