@输入值被视为对象而不是数组

时间:2019-02-11 03:47:21

标签: angular

在父组件中,按如下所示填充数组:

myarray = [];
...
... // forloop
this.myarray.push({id: <someid>, name: <somename>});

在我的父模板中,将其设置为孩子的输入

<childcomponent [myarray]="myarray"></childcomponent>

在子组件中,我将输入声明为:

@Input() myarray;

但是当我尝试迭代并获取长度时,我无法进行迭代并且length为0。然后我尝试执行“ typeof”,它返回一个对象。我试图用console.log(myarray)编写控制台,它给了我

[]
0: {id: <someid>, name: <somename>}

2 个答案:

答案 0 :(得分:1)

JavaScript中的数组是一个全局对象,其中包含项目列表。

Please take a look at my demo.

您可以将type指定为Array以使对象可迭代。

答案 1 :(得分:-1)

您的代码没有问题。 如果您打开Goog​​le控制台,请创建一个数组,例如

let a = [];
typeof(a); // "object"

最初,您要传递给输入的元素是一个空数组, 那么您正在向其中推送一些项目,因此,如果您观察到要传递给Input的数组有两种状态:1.Empty,2。某些对象被压入了数组。

如果您订阅该输入,并在控制台上记录其值,则会得到两个不同的输出。

  @Input()
  public set myArray(myArray: Array<any>) {
    if (myArray) {
      console.log(myArray);
    }
  }

只要值有任何变化,它将console.log myArray的值