Ошибка при создании массива объектов в угловом машинописи - PullRequest
0 голосов
/ 27 мая 2018

Ошибка создания углового массива объектов.Данные, которые я хочу представить, имеют вид:

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

Итак, в угловом выражении я определил их как:

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

, поэтому, когда я пытаюсь присвоить ему что-то вроде этого:

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

это выдает ошибку:

ОШИБКА TypeError: Невозможно установить свойство 'name' из неопределенного

ps: я неЯ хочу альтернативное решение этой проблемы, так как мне нужно такое представление и привязка данных для моей работы.и, кроме того, я не могу предопределить массив 'stats', потому что данные внутри него динамические и у меня нет фиксированного размера.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Определение интерфейса и создание экземпляра вашего объекта перед его привязкой

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">

Рабочий StackBlitz

0 голосов
/ 27 мая 2018
stats: Array<{ name: string, age : number }> = [];

Означает, что вы определяете массив анонимных объектов с именем и свойством age в каждом элементе массива.

Чтобы назначить 'x' свойству name первого имеющегося у вас индексанаписать:

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

Если вы не хотите указывать возраст, вы должны определить его как необязательное свойство, например так:

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

Вопросительный знак был добавлен.Не уверен, но я считаю, что хорошей практикой является определение именованного объекта и объявление массива следующим образом:

stats: Stat[];

По крайней мере, так я его и выучил.

...