Где вы делаете это в своем коде? :
events: CalendarEvent[] = [
{
start: new Date(),
end: new Date(),
title: ""+this.books[0].device, //this.books[0] is undefined
color: colors.yellow,
actions: this.actions,
resizable: {
beforeStart: true,
afterEnd: true
},
draggable: true
},
[...]
Если этот код находится в методе ngOnInit, вы должны поместить его в обратный вызов подписки следующим образом:
ngOnInit() {
this.service.getEmployees().subscribe(
(listBooks) => {
this.books = listBooks
[...]
events: CalendarEvent[] = [
{
start: new Date(),
end: new Date(),
title: ""+this.books[0].device, //this.books[0] is undefined
color: colors.yellow,
actions: this.actions,
resizable: {
beforeStart: true,
afterEnd: true
},
draggable: true
},
[...]
},
(err) => console.log(err)
);
}
Вызов getEmployees является асинхронным, что означает, что объект событий может быть инициализирован перед функцией обратного вызова, где инициализируется объект books.
Надеюсь, это ясно