#highcharts #angular8
#highcharts #angular8
Вопрос:
Я использую high charts в angular 8. Я получаю диаграмму для одного объекта в массиве объектов, но я хочу получать каждую диаграмму для каждого объекта динамически, как этого добиться. Ниже я прикрепил свой рабочий stackblitz для справки.
JSON:
[
{
"nameList":[
{
"id":203,
"Namelist_constrains":{
},
"lists":[
{
"name":"books",
"data":{
"A15people":4285,
"A30people":4285,
"A90people":4285
}
},
{
"name":"paper",
"data":{
"A15people":4285,
"A30people":4285,
"A90people":4285
}
},
{
"name":"pen",
"data":{
"A15people":4285,
"A30people":4285,
"A90people":4285
}
},
{
"name":"ball",
"data":{
"A15people":4285,
"A30people":4285,
"A90people":4285
}
},
{
"name":"bat",
"data":{
"A15people":4285,
"A30people":4285,
"A90people":4285
}
}
]
},
{
"id":204,
"Namelist_constrains":{
},
"lists":[
{
"name":"books",
"data":{
"A15people":5004,
"A30people":345,
"A90people":1334
}
},
{
"name":"paper",
"data":{
"A15people":112,
"A30people":345,
"A90people":6667
}
},
{
"name":"pen",
"data":{
"A15people":9882,
"A30people":3456,
"A90people":29898
}
},
{
"name":"ball",
"data":{
"A15people":3465,
"A30people":224,
"A90people":455
}
},
{
"name":"bat",
"data":{
"A15people":876,
"A30people":234,
"A90people":664
}
}
]
}
]
}
]
Для приведенного выше мне нужно получить две диаграммы, потому что в них есть два объекта.
В моем stackblitz у меня есть только один объект в формате json. Я немного запутался, как этого добиться.помогите мне решить эту проблему.
Ссылка:
https://stackblitz.com/edit/angular-highcharts-example-xqcnyv?file=src/app/app.component.ts
Комментарии:
1. Вы могли бы создать простой компонент, который будет принимать данные диаграммы такими, какие они есть
Input
, и возвращать отдельную диаграмму. Затем вы могли бы использовать*ngFor
директиву для создания этого компонента для каждого элемента ваших данных.
Ответ №1:
Вы могли бы создать простой компонент, который будет принимать данные диаграммы такими, какие они есть Input
, и возвращать отдельную диаграмму. Затем вы могли бы использовать *ngFor
директиву для создания этого компонента для каждого элемента ваших данных.
К сожалению, я не знаком с angular-highcharts
, поэтому я создал простую демонстрационную версию с highcharts-angular
— официально поддерживаемой оболочкой Angular.
Живая демонстрация:
https://stackblitz.com/edit/highcharts-angular-sparkline-j3nujf?file=src/app/app.component.html
данные:
myData = [
{ data: [1, 2, 3], name: "first" },
{ data: [4, 5, 6], name: "second" },
{ data: [7, 8, 9], name: "third" }
];
app.component.html
<app-spark-line
*ngFor="let elem of myData"
[name]="elem.name"
[data]="elem.data"
></app-spark-line>
spark-line.component.ts:
export class SparkLineComponent {
Highcharts: typeof Highcharts = Highcharts;
@Input() data: Array<number>;
@Input() name: string;
updateFlag = false;
chartOptions: Options = {
chart: {
type: "area",
margin: [2, 0, 2, 0],
width: 200,
height: 200,
},
series: [
{
name: '',
type: 'area',
data: []
}
]
};
ngOnChanges(change: SimpleChanges) {
this.chartOptions.series = [{
name: change.name ? change.name.currentValue : null,
type: 'area',
data: change.data.currentValue,
}];
this.updateFlag = true;
}
}
sparkline.component.html:
<highcharts-chart
[Highcharts]="Highcharts"
[options]="chartOptions"
[(update)]="updateFlag"
>
</highcharts-chart>