为什么Angular2不会自动检测组件定义中使用的指令和提供程序?

时间:2016-09-01 17:25:57

标签: angular angular2-template angular2-directives angular2-services

对于模板中使用的自定义指令,我想在Angular不知道新的html元素/属性之前可能是有意义的,直到我们在"指令中告诉它#34; Component函数的属性。

然而,我不明白为什么Angular没有弄清楚我们想要依赖注入的提供者,即使我们在Component构造函数中通过参数传递这些服务名称。这是一个设计决策,还是Angular无法从构造函数参数中找出所需的提供程序?

从本质上讲,为什么我们已经providers: [HeroService],时需要constructor(heroService: HeroService) {...}

3 个答案:

答案 0 :(得分:3)

提供商定义两件事

  1. 范围
    定义提供程序的位置定义将注入的实例。 在根共享的提供者在整个应用程序中添加了一个实例 组件上的提供程序会为自己及其子树覆盖根提供程序。

  2. 具体值
    您可以拥有像

  3. 这样的提供商
    { provide: HeroService, useClass: SuperHeroService }
    { provide: 'SomeConfig', useValue: 'someValue' }
    { provide: Foo, useFactory: () => new Bar() }
    

答案 1 :(得分:1)

实际上已经照顾好了。 RC5删除了很多样板代码。

所以你不再需要'指令'或者'提供商' @Component或@Directive声明中的语法。

链接:http://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html

答案 2 :(得分:1)

这绝对是一个设计决策,因为在某些情况下,您可能需要在整个应用程序中使用单件服务,而在另一种情况下,您可能需要更多相同服务的实例。

关于@ cDecker32的答案,你仍然需要注册提供者,只有现在你在@NgModules中进行注册才能看到这个文档:

https://angular.io/docs/ts/latest/guide/ngmodule.html