何时提供Angular 2 Renderer?

时间:2016-06-28 21:46:04

标签: angular

这是一件小事,但它一直困扰着我。我可以将一个Renderer实例注入一个组件并使用它。我不明白的是这是如何工作的。据我所知,在源代码中,只有DomRootRenderer_作为RootRenderer在Browser_App_Providers中提供。但是,Renderer的实际实现是DomRenderer类,我找不到它的提供者。那么DI如何解析渲染器呢?它是在某个地方调用DomRootRenderer_上的RenderComponent方法吗?有人能指出我在源头的正确位置吗?

2 个答案:

答案 0 :(得分:0)

这是来自文档,RootRenderer

   /** 
    * Injectable service that provides a low-level interface for modifying the UI.
     *
     * Use this service to bypass Angular's templating and make custom UI changes that can't be
     * expressed declaratively. For example if you need to set a property or an attribute whose name is
     * not statically known, use {@link #setElementProperty} or {@link #setElementAttribute}
     * respectively.
     *
     * If you are implementing a custom renderer, you must implement this interface.
     *
     * The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.
     * @experimental
     */
    export abstract class RootRenderer {
      abstract renderComponent(componentType: RenderComponentType): Renderer;
    }

答案 1 :(得分:0)

创建组件时,会为新组件创建父组件注入器的新子注入器。创建此子注入器时,可以添加其他提供程序。 Angular2通过您添加到@array = sort { lc($a) cmp lc($b) } @array; 装饰器中的providersviewProviders执行此操作,并且还添加了一系列其他提供商,例如@Component()ElementRef,{{ 1}},父组件,......

如何创建子注入器例如显示在https://stackoverflow.com/a/37734641/217408

另请参阅https://angular.io/docs/ts/latest/api/core/index/DirectiveMetadata-class.html,了解在创建组件实例时如何解析提供程序。