Это происходит потому, что ваш массив spiderChartData
остается таким же, как в Обнаружении угловых изменений.Я имею в виду, что ссылка не меняет только свойство data
внутри.
Angular
в отличие от AngularJS
не изменяет проверку на изменение значения;он сравнивает переменные, используя ===
вместо ==
.
Так что для Angular для запуска Change Detection используйте:
public spiderChartData:any = []; //<--- initialize as empty array to begin with
constructor(private fs : FirebaseService) { }
ngAfterViewInit() {
this.fs.getWorkoutRatings(this.wName).valueChanges().subscribe(res => {
this.ratings = res.map(x=>x);
console.log("data received");
this.spiderChartData = [
{label: "",fill:false, scaleShowLabels : false, borderWidth:5,
fillColor: "rgba(220,220,220,0.2)",
data: this.ratings;
});
}
ИЛИ
Если вы не хотитеинициализируйте массив как пустой, затем вам нужно вызвать ChangeDetectorRef.detectChange()
в ngAfterViewInit
, поэтому явно сообщите Angular запустить цикл обнаружения изменений.
public spiderChartData:any = [
{label: "",fill:false, scaleShowLabels : false, borderWidth:5,
fillColor: "rgba(220,220,220,0.2)",
data: [30,30,30,30,30]}
];
constructor(private fs : FirebaseService
private _cdRef : ChangeDetectorRef//<--- inject ChangeDetectorRef
) { }
ngAfterViewInit() {
this.fs.getWorkoutRatings(this.wName).valueChanges().subscribe(res => {
this.ratings = res.map(x=>x);
console.log("data received");
this.spiderChartData = [
{label: "",fill:false, scaleShowLabels : false, borderWidth:5,
fillColor: "rgba(220,220,220,0.2)",
data: this.ratings;
});
this._cdRef.detectChanges(); // <-- tell angular to run cd for this components and it's siblings
}