#arrays #angular #charts #label
Вопрос:
Я пытаюсь вставить значения в массив меток диаграммы, но после этого они не отображаются на графике. Я делаю что-то не так? Вот код.
public barChartLabels: Label[] = [];
this.mailboxTags.getTotalPending().subscribe((tags: Tag[]) => {
for (let index = 0; index < tags.length; index ) {
if(tags[index].type == 'category')
{
this.barChartLabels.push(tags[index].name);
}
}
});
Поэтому, если я консольно регистрирую метки штрих-кодов после ввода значений, я получаю следующее,
0: "general"
1: "Software"
length: 2
[[Prototype]]: Array(0)
это правильные данные, но они не отображаются на гистограмме в виде метки. Если я просто жестко закодирую
public barChartLabels: Label[] = ['general', 'software'];
тогда это работает. Что я здесь делаю не так? Я даже попробовал
this.barChartLabels.push(tags[index].name.toString());
но это все равно не работает.
Редактировать: Только что позже обнаружил, что это работает, просто изменения не отражаются сразу после загрузки страницы. Мне нужно нажать на что-то, чтобы изменения появились.
Комментарии:
1. Как на это
barChartLabels
ссылаются в вашем шаблоне?2. <div стиль=»отображение: блок;»> <div стиль=»отображение: блок;»><базовая диаграмма холста [наборы данных]=»barChartData» [метки]=»Метки» [параметры]=»Параметры» [плагины]=»Плагины для карт» [легенда]=»barChartLegend» [Тип диаграммы]=»Тип диаграммы»> <базовая диаграмма холста [наборы данных]=»Метки» [метки]=»Метки» [параметры]=»Параметры barChartOptions» [плагины]=»Плагины BarChart» [легенда]=»barChartLegend» [Тип диаграммы]=»Тип диаграммы»></холст> </холст></div> Позже я обнаружил, что он работает, но не загружает изменения на загруженную страницу. Мне нужно нажать на что-то, после чего график обновится. Есть ли в любом случае способ это исправить?
Ответ №1:
Это может быть связано с тем, как работает обнаружение изменений в Angular. Когда Angular проверяет, нуждается ли представление в обновлении, он проверяет, изменились ли значения выражений в шаблоне.
В этом случае barChartLabels
произошла мутация, но ссылка та же. Angular не проверяет наличие изменений в объекте, поэтому представление не обновляется.
Один из способов исправить это-назначить barChartLabels
in subscribe
.
this.mailboxTags.getTotalPending().subscribe((tags: Tag[]) => {
const categoryTagNames = [];
for (let index = 0; index < tags.length; index ) {
if(tags[index].type == 'category')
{
categoryTags.push(tags[index].name);
}
}
this.barChartLabels = categoryTagNames;
});