【问题标题】:Error while creating an array of objects in angular typescript在角度打字稿中创建对象数组时出错
【发布时间】:2018-11-06 08:02:54
【问题描述】:

Angular 对象数组创建错误。 我要表示的数据格式为:

stats : [
    {
        name : 'x', 
        age : 20
    },
    {
        name : 'y', 
        age : 10
    },
];

所以在角度上,我将其定义为:

stats: Array<{ name: string,  age : number }> = [];

所以当我尝试像这样为它分配一些东西时:

this.stats[0]['name'] = 'x';

这会引发错误:

错误类型错误:无法设置未定义的属性“名称”

ps:我不想要这个问题的替代解决方案,因为我的工作需要这种表示和数据绑定。 而且,我也无法预定义“统计”数组,因为其中的数据是动态的,而且我没有固定大小。

【问题讨论】:

  • 请不要大喊大叫。您可以使用 boldemphasis 文本,而不是使用全部大写。
  • 怎么了?喊在这里是什么意思?
  • 阅读 javascript 教程。任何不可怕的人都应该涵盖你的情况。
  • @Mehull 用大写字母写的单词和他们喊的一样。
  • 哦,对不起。这是我第一次发布问题。我不熟悉这里遵循的模式。

标签: javascript arrays angular typescript object


【解决方案1】:

在绑定之前定义一个接口并实例化你的对象

export class AppComponent  {

     stats:Array<Idata>=[];
     constructor(){
       this.stats[0]={name:'x',age:10}
       console.log(this.stats[0].name)
       console.log(this.stats[0].age)
     }

    }

    export interface Idata{
      name:string,
      age:number,
    }

绑定到输入字段

 <input type="text" [(ngModel)]="stats[0].name">

Working StackBlitz

【讨论】:

  • 嗨,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:
stats: Array<{ name: string, age : number }> = [];

意味着您定义了一个匿名对象数组,在数组的每个元素中都有一个名称和一个年龄属性。

要将“x”分配给第一个索引的名称属性,您必须编写:

this.stats[0] = { name: 'x', age: 10 };

如果您不想指定年龄,则必须将其定义为可选属性,如下所示:

stats: Array<{name: string, age?: number}> = [];

添加了问号。 不确定,但我相信定义一个命名对象并声明你的数组是个好习惯:

stats: Stat[];

至少我是这么学的。

【讨论】:

  • 好的,谢谢。我对此有点清楚。但接下来的问题是如何将其直接绑定到输入字段。例如,我有一个像 :: 这样的输入字段,所以每当用户输入一个值时,它应该存储在变量 stats[selectedIndex].name 中是必需的,因为“selectedIndex”是选定的播放器。并且用户可以从列表中选择任何球员并输入统计数据。
  • 正如@Vikas 回答的那样,我相信您必须绑定到现有(实例化)对象。根据您的业务逻辑,可能有使用 Observables 的解决方法(请注意 Angular 6.0 引入了 rxjs 的新方法)。
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 2018-10-27
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2018-10-09
相关资源
最近更新 更多