首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务中出现“'No for Renderer”错误

服务中出现“'No for Renderer”错误
EN

Stack Overflow用户
提问于 2017-05-04 17:50:23
回答 3查看 1.3K关注 0票数 0

我正在尝试在服务中使用Angular 2 Renderer类方法。

首先,我将其注入到类构造函数中,如下所示:

代码语言:javascript
复制
    @Injectable
    export class MyService{
     constructor(private renderer: Renderer,
                 private _cd: ChangeDetectorRef){}

     myFunct(){
       this.renderer.setElementStyle(......);
      }
    ......
    }

这样浏览器控制台就会抛出一个错误堆栈:

代码语言:javascript
复制
   Error: No provider for Renderer!
at NoProviderError.BaseError [as constructor] (http://local.xyz.com:3000/vendor.bundle.js:30912:34)
at NoProviderError.AbstractProviderError [as constructor] (http://local.xyz.com:3000/vendor.bundle.js:28881:16)

我在StackOverflow上阅读了几个与这类问题相关的答案,以及一篇关于Angular DI的thoughtram博客文章,并尝试在服务类构造函数中使用@Inject,如下所示:

代码语言:javascript
复制
   constructor(@Inject(Renderer) renderer : Renderer){}

仍然没有成功,仍然得到相同的错误。我确信我在这里漏掉了一些技巧。当我在一个组件中使用相同的东西时,它是有效的,我不知道为什么它在服务类中不接受它。

EN

回答 3

Stack Overflow用户

发布于 2017-06-03 03:03:14

您始终可以通过RendererFactory创建渲染器,如下所示:

代码语言:javascript
复制
@Injectable
export class MyService {
    private renderer: Renderer2;
    constructor(rendererFactory: RendererFactory2) {
        this.renderer = rendererFactory.createRenderer(null, null);
    }
}

通过传入null, null,您实际上是在检索应用程序的默认Renderer,因此应该不会有太多开销

票数 5
EN

Stack Overflow用户

发布于 2017-05-04 18:17:13

我做了一个类似于上面评论中提到的StackOverflow问题的变通方法。在component类中,我实例化了渲染器,并将其绑定到服务类中的属性以使用它。虽然它有效,但我仍然不相信以这种方式使用它。

票数 0
EN

Stack Overflow用户

发布于 2017-05-04 18:31:52

您只需将它从实际的组件传递给服务,它就会工作。

但是服务并不意味着要放入呈现逻辑,而应该总是用来放入业务逻辑。因此,根据良好的代码实践,应该始终在组件本身中处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43779493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档