Angular 2在组件和引导过程中声明服务之间有所不同

时间:2016-01-17 16:49:34

标签: javascript angularjs angular

这有什么不同:

bootstrap(AppComponent, [HeroService]);

而且:

@Component({
  selector: 'test',
  providers: [HeroService]
})

3 个答案:

答案 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中声明提供程序时,它将可供应用程序中的所有组件使用。如果在组件内声明它,它将仅在该组件内可用。

确保您不在两个地方都包含它,否则您将在组件内创建新实例并从引导程序覆盖该实例。