Angular 5 - 函数返回无法读取属性' push'未定义的

时间:2017-12-19 14:51:54

标签: javascript angular

我遇到了函数返回的问题无法读取属性' push'未定义的。

以下是代码:

items: [
    {
        xtype: 'button',
        text: 'test, to be updated',
        height: 30,
        flex: 0,
        listeners: {
            tap: 'onClick'
        }
    },
]

重新调整错误的功能:

export class AppComponent {

public data: any;

constructor() {

this.data = [
      {
        id: 1,
        'title': 'Title 1',
          item: {
            id: 1,
            title: 'Item Title 1',
            config: {
              row: 1,
              col: 1,
              sizex: 1
            }
          }
      }
    ];

}

}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。首先,您试图进入数组的第一个元素,因为 this.data 是一个数组,但您使用的是data.item。你必须使用data [0] .item(或者你想要推送的任何索引),否则你将不得不推入一个带有id,title,item等的全新对象(但我不会# 39;不要以为你要做的是什么。其次, item 本身不是数组,因此您无法进入item属性。你必须使它成为一个数组,以推进它。您的最终产品可能如下所示:

export class AppComponent {

    public data: Array<any>;

    constructor() {

        this.data = [
            {
                id: 1,
                'title': 'Title 1',
                items: [{
                    id: 1,
                    title: 'Item Title 1',
                    config: {
                        row: 1,
                        col: 1,
                        sizex: 1
                    }
                }]
            }
        ];

    }

    add() {
        this.data[0].items.push({ id: 2, title: 'pushed', config: { sizex: 1 } });
    }

}

答案 1 :(得分:0)

将this.data.item变成一个数组然后你应该能够推送任何你想要的东西:

   this.data = [
          {
            id: 1,
            'title': 'Title 1',
              item: [{
                id: 1,
                title: 'Item Title 1',
                config: {
                  row: 1,
                  col: 1,
                  sizex: 1
                }
              }]
          }
        ];

在添加功能中,您需要:

 add() {
    this.data[0].item.push({ title: 'pushed', config: { sizex: 1} });
  }

答案 2 :(得分:-2)

尝试将您的数据声明为

public data : Array<any> = []; 

以便您可以使用push

由于item是一个对象,因此make为数组类型。

var x = { .....
item:[],
.....
}
x.item.push(something);