当前位置: 首页 > 知识库问答 >
问题:

错误:使用Render2创建角度服务时,StaticInjectorError(AppModule)[SomeComponent->Render2]

周洋
2023-03-14

我正在尝试创建一个服务来注入

在组件中使用Render2时,我的Render2实现可以完美工作,但通过服务使用Render2时,我会遇到以下错误:

果心js:15724错误:未捕获(promise中):错误:StaticInjectorError(AppModule)[ContactUsPageComponent-

我已尝试在AppModule中导入RenderR2,但收到以下通知:

(别名)类RenderR2导入RenderR2扩展此基类以实现自定义渲染。默认情况下,Angular将模板渲染到DOM中。您可以使用自定义渲染来拦截渲染调用,或渲染到DOM以外的其他对象。

使用RenderFactory2创建自定义渲染器。

使用自定义渲染器绕过Angular的模板,并进行无法声明性表达的自定义UI更改。例如,如果需要设置名称不是静态已知的属性或属性,请使用setProperty()或setAttribute()方法。

这是我的服务实现:

import { Injectable, Renderer2, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';

@Injectable({
  providedIn: 'root'
})
export class ChatbotService {

  constructor(private renderer2: Renderer2, @Inject(DOCUMENT) private document) {}

  showChatbot() {
    const s = this.renderer2.createElement('script');
    s.type = 'text/javascript';
    s.id = 'ze-snippet';
    s.src = 'https://static.zdassets.com/ekr/snippet.js?key=7e...';
    s.text = ``;
    this.renderer2.appendChild(this.document.body, s);
  }
}

我只是使用:this从组件调用它。聊天服务。showChatbot()

任何关于如何正确实施的建议都将不胜感激!


共有1个答案

齐英耀
2023-03-14

这是我问题的答案:

注意:要在服务中使用Renderer2,您需要使用RendererFactory2创建Renderer2的实例。从那里它是直接向前的。

这是我的服务代码:

import { Injectable, Renderer2, RendererFactory2, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';

@Injectable({
  providedIn: 'root'
})
export class ChatbotService {
  private renderer: Renderer2;

  constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document) {
    this.renderer = rendererFactory.createRenderer(null, null);
  }

  showChatbot() {
    const s = this.renderer.createElement('script');
    s.type = 'text/javascript';
    s.id = 'ze-snippet';
    s.src = 'https://static.zdassets.com/ekr/snippet.js?key=7e...';
    s.text = ``;
    this.renderer.appendChild(this.document.body, s);
  }
}

这是我的组件调用:this.chatbotService.showChatbot();

希望这能帮助别人!

 类似资料:
  • 我正在尝试将服务人员添加到现有的angular(5.2,CLI 1.7.1)应用程序中。我做了我应该做的一切: > 我甚至尝试将这段代码(我在某处找到了解决方案)添加到main。ts 但我有一个错误: 未捕获(promise中)DOMExc0019:注册ServiceWorker失败:脚本具有不受支持的MIME类型('text/html')。 错误:未捕获(promise中):安全错误:注册Ser

  • 我在同一个文件夹(tut67)中创建了这个javascript文件,index.html,about.html,contact.html,services.html,但它仍然给出了每个html文件的错误。(我使用MacBook Air)。 代码如下::: 常量about=fs.readfileSync('./about.html'); const contact=fs.readfileSync('

  • 我正在intellij上启动一个tomcat服务器(没有部署任何东西),但我得到以下错误。我一直在找它,但没有运气。你能帮帮我吗? 编辑: 应用程序.属性:

  • 我不能运行Springeureka服务器,我得到以下错误。 组织。springframework。豆。工厂UnsatifiedPendencyException:创建名为“org”的bean时出错。springframework。云netflix。尤里卡。EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration:通过字段“

  • 问题内容: 我已经看到angular.factory()和angular.service()都用于声明服务;但是,我在官方文档中找不到 任何地方。 两种方法有什么区别? 应该使用哪个(假设他们做不同的事情)? 问题答案: 直到我以这种方式对自己说: 服务 :您编写的 函数 将是 新的 -ed: Factory* :将 调用 您编写的 函数 (构造函数): * 您可以根据自己的意愿进行操作,但是有一

  • 我在创建一个返回“hello”字符串的简单web服务时遇到了以下错误 白标签错误页此应用程序没有/Error的显式映射,因此您将其视为回退。 我的Web服务终结点: 我的配置类: 我的依赖关系: 我的项目结构: