对于模板中使用的自定义指令,我想在Angular不知道新的html元素/属性之前可能是有意义的,直到我们在"指令中告诉它#34; Component函数的属性。
然而,我不明白为什么Angular没有弄清楚我们想要依赖注入的提供者,即使我们在Component构造函数中通过参数传递这些服务名称。这是一个设计决策,还是Angular无法从构造函数参数中找出所需的提供程序?
从本质上讲,为什么我们已经providers: [HeroService],
时需要constructor(heroService: HeroService) {...}
?
答案 0 :(得分: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
中进行注册才能看到这个文档: