无法设置未定义的属性号

时间:2018-11-22 14:45:13

标签: angular

我有一个组件,并尝试将一些道具分配给一个对象。试一试。我没有犯错,但是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;
}

2 个答案:

答案 0 :(得分:4)

您需要做的是在this.numberOfDaysCurrentMonth上循环时将天添加到天数组中。

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]确实是未定义的,因为数组为空。

答案 1 :(得分:0)

您的数组永远不会充满任何条目。 this.days.forEach将为数组中的每个项目做某事,但是由于数组为空,所以我什么也没做。

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