#javascript #angular #highcharts
Вопрос:
Я использую Highchart в своем приложении angular.
У меня есть требование отображать сообщение в highchart, если набор данных, возвращаемый API, пуст.
Я попробовал ниже, но это не показывает сообщение в Highchart.
https://codesandbox.io/s/angular-forked-cce3s
Как бы то ни было, это можно показать, если мы установим lang: { noData: "" }
значение lang: { noData: "No Data available" }
в параметрах диаграммы.
Но я не хочу этого делать, так как изначально при загрузке страницы будет отображаться сообщение «Нет доступных данных», даже если у нас есть данные.
Есть ли у нас какое-нибудь лучшее решение для этого?
.HTML-содержимое
<highcharts-chart
id="container"
[Highcharts]="Highcharts"
[constructorType]="chartConstructor"
[options]="chartOptions"
[callbackFunction]="chartCallback"
[(update)]="updateFlag"
[oneToOne]="true"
style="width: 100%; height: 400px; display: block;">
</highcharts-chart>
.TS
import { Component, OnInit } from "@angular/core";
import * as Highcharts from "highcharts";
import * as HighchartsMore from "highcharts/highcharts-more";
import * as HighchartsExporting from "highcharts/modules/exporting";
HighchartsMore(Highcharts);
HighchartsExporting(Highcharts);
const noData = require("highcharts/modules/no-data-to-display");
noData(Highcharts);
@Component({
selector: "app-chart",
templateUrl: "./chart.component.html"
})
export class ChartComponent implements OnInit {
title = "app";
chart;
updateFlag = false;
Highcharts = Highcharts;
chartConstructor = "chart";
chartCallback;
chartOptions = {
title: { text: "" },
series: [
{
data: []
}
],
lang: { noData: "" },
exporting: {
enabled: true
},
yAxis: {
allowDecimals: false,
title: {
text: "Data"
}
}
};
data: any;
constructor() {
const self = this;
this.chartCallback = (chart) => {
// saving chart reference
self.chart = chart;
};
}
ngOnInit() {
console.log(Math.random());
if (Math.random() > 0.6) {
this.assigndata();
} else {
this.assignzero();
}
this.updateChart();
}
assigndata() {
this.data = [{ data: [5, 6, 15] }, { data: [7, 4, 14] }];
}
assignzero() {
this.data = [];
}
updateChart() {
const self = this,
chart = this.chart;
console.log(this.data);
setTimeout(() => {
if (this.data.length === 0) {
self.chartOptions.series = this.data;
self.chartOptions.lang.noData = "No Data Available...";
} else {
self.chartOptions.series = this.data;
self.chartOptions.title = {
text: "Updated title!"
};
}
self.updateFlag = true;
}, 1000);
}
}
Ответ №1:
Если у вас пустой набор данных, вы можете задать текст NoData следующим образом
self.chart.hideNoData();
self.chart.showNoData("No Data Available...");
Комментарии:
1. Это сработало. Спасибо за вашу помощь. Обновлена ссылка на файл .ts