angular – 渲染器不能用于服务?

前端之家收集整理的这篇文章主要介绍了angular – 渲染器不能用于服务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在服务中使用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');
  }
}

http://plnkr.co/edit/e8qlznCVbvZnXbLTk36z?p=preview

是的,就像Eric说的那样,你可以将它从实际的组件传递给服务,它会起作用.

但是,呈现对象的责任属于组件,而不是服务,服务旨在处理业务逻辑(主要检索数据,具体取决于您的应用程序).

整个想法是,如果您更改了演示文稿框架/库或任何与演示相关的内容,您可以重用整个服务层.如果您执行此类操作,则需要将您的服务与演示文稿相结合,从而更难以制作稍后改变.

如果你想在组件之间重用渲染逻辑,我会用逻辑创建一个父抽象类,并用Component扩展它,子组件会注入渲染器并用super()方法传递给父类.应该调用父的构造函数.

至少你可以像建议的解决方案一样创建一个@Injectable对象,但是将其命名为SomethingRenderer而不是Service,并将其与其他真实的Data Services分开.

猜你在找的Angularjs相关文章