Пытаюсь динамически установить значения атрибутов для элемента шаблона:
<canvas id='graph' #graph *ngIf="trainings.length"></canvas>
В компоненте присвоение происходит в коллбеке ajax-запроса:
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { TrainingsService } from '../../../services/trainings.service';
import { Training } from '../../../interfaces/training';
@Component({
selector: 'app-graph',
templateUrl: './graph.component.html',
styleUrls: ['./graph.component.scss']
})
export class GraphComponent implements OnInit {
private basicMeasure: number = 40;
private trainings: Training[] = [];
@ViewChild('graph') graph: ElementRef;
constructor(private trainingsService: TrainingsService) { }
ngOnInit() {
this.getTrainings();
}
private getTrainings(): void {
this.trainingsService.getTrainings().subscribe((trainings) => {
this.trainings = trainings;
const width = this.trainings.length * this.basicMeasure + 'px';
const height = '260px';
this.graph.nativeElement.style.width = width;
this.graph.nativeElement.style.height = height;
this.graph.nativeElement.style.backgroundColor = 'cyan';
});
}
}
В результате в консоли браузера получаю ошибку:
ERROR TypeError: Cannot read property 'nativeElement' of undefined
Но если присвоение выношу из коллбека, то всё работает без проблем:
ngOnInit() {
this.getTrainings();
setTimeout(() => {
const width = this.trainings.length * this.basicMeasure + 'px';
const height = '260px';
this.graph.nativeElement.style.width = width;
this.graph.nativeElement.style.height = height;
this.graph.nativeElement.style.backgroundColor = 'cyan';
}, 1000);
}
Помогите пожалуйста разобраться почему такая несправедливость происходит?