Добавить суффикс к набору данных Chart.js?

Я использую Chart.js для отображения данных на своем сайте и хотел бы добавить суффикс к полям данных, чтобы указать, что они в граммах (г). Я не могу найти в документации ничего, что могло бы помочь, но это кажется довольно простой функцией.

Например, я хотел бы, чтобы данные отображались как 32 г, 38 г, 53 г, а не просто 32, 38, 53. Вы не можете просто добавить их в массив, поскольку это требуется в виде чисел только для создания диаграммы.

PHP

$myChart = array(
    "type" => "doughnut",
    "data" => array(
        "labels" => ['Label1', 'Label2', 'Label3'],
        "datasets" => [
            array(
                "data" => [ 32, 38, 53 ],
            )
        ]
    )
);

HTML

<div class = "chart" data-charts = "{"type":"doughnut","data":{"labels":["Label1","Label2","Label3"],"datasets":[{"data":["56","31","21"],}]}}">
    <div class = "chart-container">
        <canvas class = "chartjs-render-monitor">
        </canvas>
    </div>
</div>

JQUERY

// Chart init
window.onload = function() {

    // Find all charts
    var containers = document.querySelectorAll('.chart');

    // For each chart
    containers.forEach(function(container) {

        // Parse data
        var charts = JSON.parse(container.dataset.charts);

        // Add container div
        var div = document.createElement('div');
        div.classList.add('chart-container');

        // Add canvas for chart to be drawn in
        var canvas = document.createElement('canvas');

        // Append new elements
        div.appendChild(canvas);
        container.appendChild(div);

        // Config
        var ctx = canvas.getContext('2d');
        var config = charts;

        // Init chart
        var myChart = new Chart(ctx, config);

    });
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 450
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы это работало, вы можете использовать обратный вызов конфигурации всплывающих подсказок, чтобы добавить строку к значению в наборе данных, примерно так:

var containers = document.querySelectorAll('.chart');
containers.forEach(function(container) {
  var charts = JSON.parse(container.dataset.charts);

  var div = document.createElement('div');
  div.classList.add('chart-container');

  var canvas = document.createElement('canvas');
  div.appendChild(canvas);
  container.appendChild(div);

  var ctx = canvas.getContext('2d');
  var config = charts;
  var myChart = new Chart(ctx, $.extend(config, {
    options: {
      tooltips: {
        enabled: true,
        mode: 'single',
        callbacks: {
          label: function(tooltipItems, data) {
            return data.datasets[0].data[tooltipItems.index] + 'g';
          }
        }
      }
    }
  }));
});
canvas {
  background-color: #eee;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"></script>
<div class = "chart" data-charts='{"type":"doughnut","data":{"labels":["Label1","Label2","Label3"],"datasets":[{"data":["56","31","21"]}]}}'></div>

Спасибо, Рори, это выглядит великолепно! Единственная проблема, с которой я сталкиваюсь, заключается в том, что моя структура немного отличается от вашей, и я получаю ошибки JS в финальной функции. Есть ли способ переформатировать, чтобы он соответствовал моей структуре, пожалуйста? Кажется, ошибка находится в разделе функций (tooltipItems, data)?

dungey_140 11.06.2019 17:25

Трудно решить проблему, не видя ее. Я сделал предположение о том, как выглядит ваша структура данных JS, на основе массива PHP, который вы разместили в вопросе. Если бы вы могли отредактировать вопрос, включив в него фактический JS, я мог бы отредактировать ответ для вас.

Rory McCrossan 11.06.2019 17:26

Конечно, извините, я должен был изначально включить полный шебанг. Я обновил вопрос в соответствии с просьбой. Спасибо

dungey_140 11.06.2019 17:31

Извините, не могли бы вы включить div .chart, когда он отображается в HTML. PHP не имеет отношения к проблеме и делает решение неясным.

Rory McCrossan 11.06.2019 17:32

Есть пара вопросов. Во-первых, ваши двойные кавычки не совпадают. Вам нужно использовать ' для внешнего HTML-атрибута, иначе он будет мешать " в JSON. Во-вторых, вы не можете поместить функцию в JSON, который вы вставили в атрибут data, как я изначально предлагал. Чтобы обойти это, вы можете использовать $.extend() jQuery, чтобы добавить параметры конфигурации всплывающей подсказки к данным диаграммы перед вызовом конструктора Chart.js. Я обновил ответ для вас.

Rory McCrossan 11.06.2019 17:53

Привет, Рори. Извините за задержку с ответом, вчера был выходной. Это идеально, и я отметил как решенный, большое спасибо за весь вклад. Единственная последняя мелкая ошибка, которую я вижу, заключается в том, что я получаю ошибку jQuery в var myChart = new Chart(ctx, $.extend(config, {, говоря, что «Диаграмма» не определена. Можно ли это устранить?

dungey_140 13.06.2019 12:38

Нет проблем, рад помочь. Вы получите эту ошибку, если вы не включили библиотеку диаграмм на страницу или если вы включили ее после, которую вы вызываете new Chart()

Rory McCrossan 13.06.2019 12:39

Спасибо. chart.js включен перед моим кодом выше, мне также нужно объявить что-то в скрипте выше?

dungey_140 13.06.2019 12:52

Нет, это должно сработать, как видно из примера в моем ответе. Я бы предложил открыть новый вопрос, который показывает весь HTML и скрипт.

Rory McCrossan 13.06.2019 13:02

Другие вопросы по теме