首页 > 解决方案 > 绑定数据时出现Angular Elements Web Component错误

问题描述

我正在玩 Angular Elements,看看我是否可以使用现有的 Angular 组件创建一个 Web 组件,以便我可以在不同的框架之间共享该组件。我使用 Angular Elements 创建了一个简单的 Web 组件,它应该将对象数组作为输入并显示类似列表的内容。我能够编译,但是当我将它连接到简单的 HTML 页面时,我收到以下错误:

ERROR 错误:“尝试区分 '[object Object]、[object Object]、[object Object]' 时出错。只允许使用数组和可迭代对象”

我的页面如下所示:

  <head>    
    <title>Angular Element Component in HTML</title>
  </head>
  <body>
    <base href=".">
    <script src="elements/myCustomElements.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="elements/styles.css">


    <app-my-custom-element>

    </app-my-custom-element>

    <script type="text/javascript">
    let testData = [
    {
        name: 'Test Name 1',
        value: 'test1'
    },
    {
        name: 'Test Name 2',
        value: 'test 2'
    },
    {
        name: 'Test Name 3',
        value: 'test 3'
    }];

    const appMyCustomElement = document.getElementsByTagName('app-my-custom-element');

    if(appMyCustomElement.length>0){
      const target = appMyCustomElement[0];

      target.setAttribute('users', testData);
      target.addEventListener('search', (e) => testData.push({
        name: e,
        value: 'test'
      }));
    }
  </script>
  </body>
</html>

是否有任何简单的方法可以向 Angular Elements 组件指示这是一个数组?

澄清:我在这里插入的代码不是 Angular 而是纯 HTML。我在 Angular 中有一个单独的应用程序,它被“编译”为Angular Elements webcomponent。在“编译”过程之后,我最终会得到 2 个文件:myCustomElement.js 和 styles.css。现在可以在用 React、Vue 甚至纯 HTML 编写的完全随机的应用程序中引用这些文件。您看到的代码是一个纯 HTML 页面,它试图使用我的 webcomponent

我现在不喜欢的解决方案: 在设置属性时填充 HTML 页面,将其作为 json 传递:

<html>
  <head>    
    <title>Angular Element Component in HTML</title>
  </head>
  <body>
    <base href=".">
    <script src="elements/myCustomElements.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="elements/styles.css">


    <app-my-custom-element>

    </app-my-custom-element>

    <script type="text/javascript">
    let testData = [
    {
        name: 'Test Name 1',
        value: 'test1'
    },
    {
        name: 'Test Name 2',
        value: 'test 2'
    },
    {
        name: 'Test Name 3',
        value: 'test 3'
    }];

    const appMyCustomElement = document.getElementsByTagName('app-my-custom-element');

    if(appMyCustomElement.length>0){
      const target = appMyCustomElement[0];

      target.setAttribute('users', JSON.stringify(testData));
      target.addEventListener('search', (e) => {
            let currentData = JSON.parse(target.getAttribute('users'));
            currentData.push({
                name: e.detail,
                value: 'test'
      });

      target.setAttribute('users', JSON.stringify(currentData));
    }
  </script>
  </body>
</html>

在 Angular 应用程序中,我必须将 json 转换为对象,例如:


  convertedUsers: IUserInfo[] = [];

  @Input() set users(value: string) {
    console.warn(value);
    this.convertedUsers = JSON.parse(value) as IUserInfo[];
  }

  get users(): string {
    return JSON.stringify(this.convertedUsers);
  }

  @Output() search = new EventEmitter<string>();

标签: javascriptangularweb-componentangular-elements

解决方案


推荐阅读