提供Angular服务的VS forRoot

use*_*366 7 angular

我想知道这些代码是否正确

是等价与否.

我可以使用provideIn吗?

与...相同的结果

forRoot?

提前致谢

@Injectable({
  providedIn: 'root'
})
export class MyService {
  constructor() { }
}
Run Code Online (Sandbox Code Playgroud)

[我仍然会将myModule保留为与allowedId单例服务一起使用]

The*_*eal 9

使用providedInvs providers[]:

  1. providedIn是新的Angular做DI的方式.providedIn从Angular 6开始

  2. 官方名称是"Tree-shakeable providers" - 而不是提供其所有服务的模块,现在服务本身声明它应该提供的位置

  3. 使用providedIn: 'root'根本不需要导入库模块,我们可以简单地注入所需的服务,它只是起作用

  • 那么为什么我们仍然使用 `RouterModule` 和 `forRoot` 模式呢? (2认同)

Sun*_*ngh 5

是的,forRoot而且provideIn都是等效的,因为两者都将创建应用程序的唯一,只有一个单例。即使将其加载到延迟加载的组件中。

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


Rah*_*hul 4

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

Angular 会将服务注入module- 如果您使用延迟加载模块 - 每当您加载其他模块时,Angular 都会创建新的注入器

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

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

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