我有一個組件,它通過一個服務從我的HTML模板中的內容中填充其ngInit()
方法中的Object數組。在Typescript中未定義的數組,但在HTML中工作
我的問題是我可以在HTML模板中使用這個數據,但如果我嘗試在我的TypeScript文件中使用這個相同的對象數組,我會得到一個未定義的錯誤。
下面是我的問題的簡化代碼示例:
@Component({
selector: 'booking',
template: `
<div *ngFor="let r of requestedBookings">
<label>Requested on {{r.created | date: 'd MMM H:mm'}}</label>
</div>
`
})
export default class BookingComponent {
requestedBookings: Object[];
constructor(private bookingService: BookingService) {
}
ngOnInit() {
this.getRequestLog();
// Cannot read property 'length' of undefined error
// console.log(this.requestedBookings.length);
}
private getRequestLog(): void {
this.bookingService.getRoomRequestBooking(1,1,1)
.subscribe(data => this.requestedBookings = (data as any))
.results, err => {
console.log(err);
}
}
爲什麼在上面的例子中,我可以使用requestedBookings陣列有望在HTML模板,但打字稿內文件我收到未定義的錯誤?
因爲'getRequestLog'是異步的,並且因此'this.requestedBookings.length'正在運行,則會返回預訂之前。 – Rob
@Rob是正確的。 'requestedBookings:Object [];'不是一個實例,它是一個類型聲明並且是環境變量。當'ngOnInit'運行時,你的變量沒有被實例化。 'requestedBookings:Object [] = [];'將允許控制檯日誌執行。 – muiiu
那麼如何確保getRequestLog()在我訪問數組之前完成? – Sisky