根据我的理解,您可以在引导程序调用中定义应用程序提供程序,如下所示: bootstrap( App, [disableDeprecatedForms(), provideForms()]]) 或者在你的根组件中,如下所示: @Component({ selector: 'my-app', pro
bootstrap( App, [disableDeprecatedForms(), provideForms()]] )
或者在你的根组件中,如下所示:
@Component({ selector: 'my-app', providers: [disableDeprecatedForms(), provideForms()], ... )
但是,我创建了一个表单验证器插件,该插件需要provideForms提供程序,并且此指令仅在引导选项时有效.我创建了一个plunk to illstrate the problem:验证器工作,如果我将providerForms()添加到bootstrap调用.一旦我从引导程序调用中注释掉providerForms(),验证程序就不再起作用了.我假设组件中的providerForms定义已足够.任何解释?
Angular2 DI总是向上查找请求的依赖项的提供者.如果由引导程序实例化的服务需要一个依赖项,而不是一个注入的服务,它将在树中进一步提供.在根组件的bootstrap(…)和@Component(…)处提供不等效,但这种区别与根组件或其子项或其他子项中的所有内容无关.
bootstrap()比根组件高一级.
Angular2样式指南还建议优先选择root组件而不是bootstrap(),因为bootstrap应该保留给系统内容.
表单和路由器需要在创建第一个组件之前进行实例化(例如,在V3路由器的早期版本中存在一个错误,其中根组件需要注入路由器或包含routerLink,否则路由器将无法启动) .
因此,在根组件创建之前需要实例化某些事情时,会出现bootstrap()和根组件之间的差异变得相关的情况.