这有什么不同:
bootstrap(AppComponent, [HeroService]);
而且:
@Component({
selector: 'test',
providers: [HeroService]
})
答案 0 :(得分:2)
如果仅将其添加到bootstrap()
,则会得到一个单例,如果将其添加到组件,则会为每个组件实例获取一个新实例。如果将它添加到两者,则取决于您注入它的位置。 Angular2具有分层DI。它向上搜索提供者,返回它找到的第一个提供者。
另见 http://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html
答案 1 :(得分:1)
当您将HeroService
作为依赖项传递给bootstrap
方法时,HeroService
就像一个单例一样 - 在整个应用程序中只有一个类的实例可用。
将其传递到providers
数组中将创建一个新的服务实例。
请查看this article以获取Angular 2中依赖注入的详细说明。
答案 2 :(得分:1)
在bootstrap中声明提供程序时,它将可供应用程序中的所有组件使用。如果在组件内声明它,它将仅在该组件内可用。
确保您不在两个地方都包含它,否则您将在组件内创建新实例并从引导程序覆盖该实例。