是否可以在服务中使用Renderer或仅在组件中使用?
如果我将渲染器注入服务器,则会出现错误,即Renderer提供程序丢失.
请参阅plunker的控制台:
import {Injectable,Component,Renderer,ElementRef} from 'angular2/core'; @Injectable() class TestService { constructor( private _renderer: Renderer ) {} renderElement(elementRef: any) { this._renderer.createElement(elementRef.nativeElement,'div'); } }
是的,就像Eric说的那样,你可以将它从实际的组件传递给服务,它会起作用.
但是,呈现对象的责任属于组件,而不是服务,服务旨在处理业务逻辑(主要检索数据,具体取决于您的应用程序).
整个想法是,如果您更改了演示文稿框架/库或任何与演示相关的内容,您可以重用整个服务层.如果您执行此类操作,则需要将您的服务与演示文稿相结合,从而更难以制作稍后改变.
如果你想在组件之间重用渲染逻辑,我会用逻辑创建一个父抽象类,并用Component扩展它,子组件会注入渲染器并用super()方法传递给父类.应该调用父的构造函数.
至少你可以像建议的解决方案一样创建一个@Injectable对象,但是将其命名为SomethingRenderer而不是Service,并将其与其他真实的Data Services分开.