Angular Web组件已注册两次

问题描述

我创建了一个Angular 10 Webelement组件并将其注册到NgModule中,如下所示:

    export class AppModule implements dobootstrap {
    constructor(private injector: Injector) {}
    ngdobootstrap(appRef: ApplicationRef) {
      const element = createCustomElement(LogsComponent,{
        injector: this.injector,});
      customElements.define("logs-component",element);
  }
}

然后,我在package.json文件添加了两个脚本来打包和构建Web组件:

    "build:elements": "ng build --prod --aot --project elements --output-hashing none && npm run pack:elements && cp projects/elements/package.json dist/elements","pack:elements": "cat ./dist/elements/*.js > dist/logs-viewer-component.js && ls -lah dist/logs-viewer-component.js"

运行'npm run build:elements'脚本后,我得到logs-viewer-component.js,然后将其部署到Nginx反向代理后面的服务器。

我想通过添加将该Web组件附加到另一个Angular应用程序内的特定组件中

        const logsComponentElement = document.createElement('logs-component');
        const logsComponentElementContainer = document.getElementById('ng-container');
        logsComponentElementContainer.appendChild(this.logsComponentElement);

,然后通过将脚本标签添加到index.html文件标题标签中:

<script src="http://localhost:8080/components/logs-viewer-component/logs-viewer-component.js"></script>

问题是:构建父Angular应用后,我总是会遇到此错误

logs-viewer-component.js:1 DOMException: Failed to execute 'define' on 'CustomElementRegistry': the name "x-component" has already been used with this registry
    at CustomElementRegistry.t.<computed> [as define] (http://localhost:8080/components/logs-viewer-component/logs-viewer-component.js:1:1512891)

注意:

服务模式下没有出现此错误

编辑:

在定义元素之前添加此条件之后:
if (!customElements.get('logs-component')) {
      console.log('inside if')
      customElements.define('logs-component',element);
    }

我不再遇到错误,但是DOM中什么也没出现。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...