html尝试在promise完成之前访问字段

时间:2018-02-11 08:31:39

标签: angular typescript promise angular-promise angular5

我的TS类中有一个字段:currentMonth: Month;ngOnInit()方法,用于发出GET请求并初始化此字段:

ngOnInit() {
  this.dataService.getAllMonth(this.currentYear).subscribe(data => {

  // setting current month
  this.currentMonth = data.find(function (m) {
    return m.numberInYear === currentDate.getMonth() + 1;
  });

获得当月后,我想为它创造天数并展示其中一些。我是这样做的:

1)在ngOnInit()

中调用方法
this.generateDaysForCurrentMonth(this.currentMonth);

2)方法:

private generateDaysForCurrentMonth(mon: Month) {
let days = new Array<Day>();
 for(var i = 0; i < mon.numberOfDays; i++) {
  days[i] = new Day(i, mon.name, mon.year);
 }
this.currentMonth.days = days;
}

3)方法,返回n天:

private getPartOfMonth(from: number, to: number): Array<Day>{
 return this.currentMonth.days.slice(from, to);
}

4)显示例如7天:

<div *ngFor="let day of getPartOfMonth(0, 7)">
    <td >{{day.numberInMonth}}</td>
</div>

当我转到页面时,出现错误:ERROR TypeError: Cannot read property 'days' of undefined

在这一行:

return this.currentMonth.days.slice(from, to);

类似的事情发生在这里:

<div *ngFor="let m of months" >
  <button (click)="loadMonth(m.name)" mat-raised-button >{{month.name}}</button>
</div>

month.name - 显示正确,但在方法中它通过&#34; undefined&#34;

此代码有什么问题?

1 个答案:

答案 0 :(得分:0)

使用安全导航操作员。 {{currentMonth?.name}}。当currentMonth为null或未定义时,它将返回null并且在尝试访问currentMonth属性时不会抛出错误。