Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度5-函数返回无法读取属性';推动';未定义的_Javascript_Angular - Fatal编程技术网

Javascript 角度5-函数返回无法读取属性';推动';未定义的

Javascript 角度5-函数返回无法读取属性';推动';未定义的,javascript,angular,Javascript,Angular,我遇到函数返回无法读取未定义的属性“push”的问题 代码如下: export class AppComponent { public data: any; constructor() { this.data = [ { id: 1, 'title': 'Title 1', item: { id: 1, title: 'Item Title 1', con

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

代码如下:

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
            }
          }
      }
    ];

}

}
以及重新调整错误的函数:

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

如何修复此问题?

将此.data.item转换为一个数组,然后您应该能够按需推送任何内容:

   this.data = [
          {
            id: 1,
            'title': 'Title 1',
              item: [{
                id: 1,
                title: 'Item Title 1',
                config: {
                  row: 1,
                  col: 1,
                  sizex: 1
                }
              }]
          }
        ];
在add函数中,您需要:

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

尝试将您的数据声明为

public data : Array<any> = []; 

您的代码存在一些问题。首先,您试图插入数组的第一个元素,因为this.data是一个数组,但您使用的是data.item。您必须使用数据[0].item(或您想要推送到的任何索引),否则您必须推送一个具有id、标题、item等的全新对象(但我不认为您正在尝试这样做)。其次,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 } });
    }

}
导出类AppComponent{
公共数据:数组;
构造函数(){
此参数。数据=[
{
id:1,
“标题”:“标题1”,
项目:[{
id:1,
标题:“项目标题1”,
配置:{
行:1,
上校:1,
尺码:1
}
}]
}
];
}
添加(){
this.data[0].items.push({id:2,标题:'push',配置:{sizex:1});
}
}

在您的声明中,
item
是一个对象,而不是一个数组,因此不能对任何对象调用push。尝试在其周围添加
[
]
。没有
数据。项
<代码>数据
是一个数组,而不是一个对象。您得到的错误是什么?另外,请添加预期的行为项目数组周围的语法不正确,您忘记了
{
}
,这是行不通的,因为OP在add函数中访问数据数组的方式work@AdrienBrunelat事实并非如此。可以将具有不同特性的对象推入同一阵列。这个JSFIDLE证明了这一点:。我删除了该评论,不会就此进行辩论,因为我的记忆不够新鲜。我要指出的是,尽管JSFIDLE使用javascript,不管是否使用ES6,但这不是TypeScript,有些东西可能使用其中一个而不是另一个进行编译。
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 } });
    }

}