繁体   English   中英

Angular 服务在 VS forRoot 中提供

[英]Angular service providedIn VS forRoot

我想知道这两个代码块是否等效。

我可以使用providedInforRoot相同的结果吗?

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

对比

@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 { }

[我仍然会保留我的MyModule以供providedId的Id 单例服务单独使用]

使用providedInproviders[]

  1. providedIn是 Angular 进行 DI 的新方法。 从 Angular 6 开始就引入了providedIn

  2. 正式名称是“Tree-shakeable providers”——不再是提供所有服务的模块,而是服务本身声明应该在哪里提供它

  3. 使用providedIn: 'root'完全不需要导入库模块,我们可以简单地注入所需的服务,它就可以工作

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

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

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

Angular 将在module中注入服务 - 如果您使用延迟加载模块 - Angular 将在您加载其他模块时创建新的注入器

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

希望这对您有所帮助 - 编码快乐!

检查此链接以获取更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM