第一次执行-Chart对象似乎不完整

时间:2019-02-27 15:52:05

标签: javascript chart.js

我正在尝试在现有站点中实现chart.js(版本:2.7.3)。这是我的方法:

在头部:

<script src="../Chart.js" type="text/javascript"></script>

在正文部分:

<canvas id="myChart" width="400" height="400"></canvas>
<script language="JavaScript" type="text/javascript">
(function() {
    var ctx = document.getElementById("myChart").getContext('2d');

    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
            datasets: [{
                label: '# of Votes',
                data: [12, 19, 3, 5, 2, 3],
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'rgba(255,99,132,1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero:true
                    }
                }]
            }
        }
    });

})();
</script>

运行此命令时,出现以下JavaScript错误:

Uncaught TypeError: Cannot set property 'x-axis-0' of undefined at Chart.js:4111

我查了一下,该行将执行以下操作:

updated[id] = true;
具有id

是'x-axis-0',而updated是未定义的。

在第4067行中,定义了方法buildOrUpdateScales()开始,开始看起来如下:

buildOrUpdateScales: function() {
    var me = this;
    var options = me.options;
    var scales = me.scales || {};
    var items = [];
    var updated = Object.keys(scales).reduce(function(obj, id) {
        obj[id] = false;
        return obj;
    }, {});
    .
    .
    .

对于我来说,updated始终是未定义的,因为scales / me中缺少属性this

我不明白为什么会这样。在选项中,您可以设置选项scales,此处我通过复制示例来完成此操作,但是var scales =明确定义为this.scales而不是this.options.scales

谁能解释为什么我的scales对象中缺少Chart属性?预先感谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题updated is undefined

对我来说,发生错误是因为与旧版本的库prototypejs冲突。

示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <canvas id="chartJsCanvas"></canvas>
  <script src="https://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.js"></script>
  <script type="text/javascript">
    window.onload = function() {
      new Chart(document.getElementById('chartJsCanvas').getContext('2d'), {
        type: 'line',
        data: {
          datasets: [{data:[1,2]}],
        }
      });
    };
  </script>
</body>
</html>

https://jsbin.com/zedakufimi/edit?html,output

您只需删除链接的jsbin中的依赖项即可查看所显示的图表。

新版本似乎没有冲突。