无法设置undefined的属性编号

问题描述 投票:1回答:2

我有一个组件,并尝试为一个对象分配一些道具。试试no1。我没有错,但在UI上没有显示任何内容,在尝试no2我有一个错误“无法设置未定义的属性编号”。

days: Day[] = [];
now: Date = new Date();

ngOnInit() {
    this.days = [];

    for (let i = 0; i < this.numberOfDaysCurrentMonth; i++) {
        // try no.1
        this.days.forEach(x => x.number = i);
        this.days.forEach(x => x.weekDay = new Date(this.currentYear, this.currentMonth - 1, i).getDay());
        this.days.forEach(x => x.name = '')

        //try no.2
        this.days[i].number = i;
        this.days[i].weekDay = new Date(this.currentYear, this.currentMonth - 1, i).getDay());
        this.days[i].name = ''
    }

export class Day {
    number: number;
    weekDay: number;
    name: string;
}
angular
2个回答
4
投票

当你循环遍历this.numberOfDaysCurrentMonth时,你需要做的是将日期添加到days数组中

ngOnInit() {
  this.days = [];

  for (let i = 0; i < this.numberOfDaysCurrentMonth; i++) {
    let day = {
      number: i,
      weekDay: new Date(this.currentYear, this.currentMonth - 1, i).getDay(),
      name: ''
    }
    this.days.push(day);
  }
}

你使用this.days.forEach的尝试没有做任何事情,因为它循环在days数组中的每个对象是空的。

同样,this.days[i]确实是未定义的,因为数组是空的。


0
投票

您的数组永远不会填充任何条目。 this.days.forEach将为数组中的每个项做一些事情,但由于数组为空,我什么都不做。

您应首先填充数组,然后在其上使用forEach。

© www.soinside.com 2019 - 2024. All rights reserved.