AmChart V4: интерактивные метки осей категорий (диаграмма столбцов с накоплением)
Я использовал amchart 4 для создания XYChart, точнее, диаграммы с накоплением столбцов, и я хотел бы сделать ярлыки столбцов кликабельными. Вот что я сделал (с небольшой веточкой):
var chart = am4core.create("chartdiv", am4charts.XYChart);
chart.data = [
{
'CategoryAxis' : 'Column label 1',
{% for valueAxis in listValueAxes %}
'{{ valueAxis.name }}': {{ valueAxis.numericalValue }},
{% endfor %}
},{
'CategoryAxis' : 'Column label 2',
{% for valueAxis in listValueAxes %}
'{{ valueAxis.name }}': {{ valueAxis.numericalValue }},
{% endfor %}
}
];
var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
categoryAxis.dataFields.category = "CategoryAxis";
var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.renderer.labels.template.disabled = true;
var label = categoryAxis.renderer.labels.template;
function createSeries(field) {
var series = chart.series.push(new am4charts.ColumnSeries());
series.dataFields.valueY = field;
series.dataFields.categoryX = "CategoryAxis";
series.stacked = true;
return series;
}
{% for valueAxis in listValueAxes %}
series = createSeries('{{ valueAxis.name }}');
// Clickable cells
series.columns.template.url = "{{path('viewValueAxis', {'id':valueAxis.id})}}";
{% endfor %}
Последняя строка с url
Свойство позволяет нажимать на "ячейки" столбцов и перенаправлять на страницу, посвященную значению, которое представлено. Я бы тоже хотел, чтобы метка колонок была кликабельной. Я пытался сделать что-то вроде этого:
{% for categoryAxis in listCategoryAxes %}
label.events.on("hit", function(){
window.location.href = "{{path('viewCategoryAxis', {'id':categoryAxis.id})}}";
}, this);
{% endfor %}
Проблема в том, что надписи не обрабатываются независимо и перенаправляются на одну и ту же страницу. Я хотел бы использовать url
свойство, но где цель клика находится на метке вместо самого столбца. Я бы использовал что-то вроде series.columns.template.labels.url
или может быть urlTarget
собственность, но ничего из этого, кажется, не работает.
1 ответ
Если у вас есть URL в ваших данных, то самый простой способ сделать то, что вам нужно, это установить:
categoryAxis.renderer.labels.template.propertyFields.url = "url"
То же самое с хитом:
categoryAxis.renderer.labels.template.events.on("hit", function(event){
window.location.href = event.target.dataItem.dataContext.url;
})