为什么 Angular2 不自动检测组件定义中使用的指令和提供程序?
Why doesn't Angular2 auto detect directives and providers used in a component definition?
对于在模板中使用的自定义指令,我想 Angular 不知道新的 html elements/attributes 直到我们在 [=20= 中告诉它可能是有意义的] 属性的Component函数。
然而,我不明白为什么 Angular 没有弄清楚我们想要依赖注入的提供者 即使我们通过参数传递这些服务名称在组件构造函数中。这是设计决定,还是 Angular 无法仅从构造函数参数中找出所需的提供程序?
本质上,我们已经有了constructor(heroService: HeroService) {...}
,为什么还需要providers: [HeroService],
?
其实已经处理好了。 RC5 删除了很多样板代码。
因此您不再需要在@Component 或@Directive 声明中使用'directives' 或'providers' 语法。
Link: http://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html
提供商定义了两件事
范围
您定义提供者的位置定义了将注入的实例。
添加到根的提供程序与整个应用程序共享一个实例。
组件上的提供者会为自己及其子树覆盖根提供者。
具体值
您可以拥有像
这样的提供商
{ provide: HeroService, useClass: SuperHeroService }
{ provide: 'SomeConfig', useValue: 'someValue' }
{ provide: Foo, useFactory: () => new Bar() }
这绝对是一个设计决定,因为在某些情况下,您可能希望在整个应用程序中使用单一服务,而在另一种情况下,您可能需要相同服务的更多实例。
关于@cDecker32 的回答,您仍然需要注册提供者,只是现在您在 @NgModules
中注册,请查看此文档:
对于在模板中使用的自定义指令,我想 Angular 不知道新的 html elements/attributes 直到我们在 [=20= 中告诉它可能是有意义的] 属性的Component函数。
然而,我不明白为什么 Angular 没有弄清楚我们想要依赖注入的提供者 即使我们通过参数传递这些服务名称在组件构造函数中。这是设计决定,还是 Angular 无法仅从构造函数参数中找出所需的提供程序?
本质上,我们已经有了constructor(heroService: HeroService) {...}
,为什么还需要providers: [HeroService],
?
其实已经处理好了。 RC5 删除了很多样板代码。
因此您不再需要在@Component 或@Directive 声明中使用'directives' 或'providers' 语法。
Link: http://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html
提供商定义了两件事
范围
您定义提供者的位置定义了将注入的实例。 添加到根的提供程序与整个应用程序共享一个实例。
组件上的提供者会为自己及其子树覆盖根提供者。具体值
您可以拥有像 这样的提供商
{ provide: HeroService, useClass: SuperHeroService }
{ provide: 'SomeConfig', useValue: 'someValue' }
{ provide: Foo, useFactory: () => new Bar() }
这绝对是一个设计决定,因为在某些情况下,您可能希望在整个应用程序中使用单一服务,而在另一种情况下,您可能需要相同服务的更多实例。
关于@cDecker32 的回答,您仍然需要注册提供者,只是现在您在 @NgModules
中注册,请查看此文档: