提供Angular服务的VS forRoot

问题描述 投票:5回答:3

我想知道这两个代码块是否相同。

我可以使用与providedIn相同结果的forRoot吗?

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

VS

@Injectable()
export class MyService {
  constructor() { }
}

@NgModule({
  imports: []
})
export class MyModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: MyModule,
      providers: [
        MyService
      ]
    };
  }
}

@NgModule({
  imports: [
    MyModule.forRoot()
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

[我仍然会将MyModuleprovidedId单件服务一起使用]

angular
3个回答
1
投票

providedIn将根据值直接注入service - 如果它的'root'它将直接注入root module - 这将帮助你停止在模块service中添加你的[providers]

Angular将在module中注入服务 - 如果您使用的是Lazy加载模块 - 只要加载其他模块,angular就会创建新的注入器

如果你使用Lazy加载最好在模块上使用forRoot()注入并确保你的service不会创建多个注入器

希望这能帮到你 - 快乐的编码!!

查看此link了解更多信息


8
投票

使用providedIn vs providers[]

  1. providedIn是新的Angular做DI的方式。 providedIn是从Angular 6开始的
  2. 官方名称是“Tree-shakeable providers” - 而不是提供其所有服务的模块,现在服务本身声明它应该提供的位置
  3. 使用providedIn: 'root'根本不需要导入库模块,我们只需注入所需的服务即可

5
投票

是的,forRootprovideIn都是等价的,因为它们都会为应用程序创建唯一且唯一的单例。即使它被加载在延迟加载的组件中。

请参考这篇很好的文章 - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7

热门问题
推荐问题
最新问题