无法阅读财产' Concat'未定义的

时间:2017-07-27 13:30:06

标签: javascript jquery chart.js chart.js2

我正在尝试使用charts.js插件并执行组合图表,但我希望该行位于栏顶部。这是我正在使用的语法,并且我的数组linedata & bardata都已填充,但每当我运行此语法时,我都会收到错误

  

未捕获的TypeError:无法读取属性' concat'未定义的       在n(Chart.min.js:11)
      在t.update(Chart.min.js:11)
      在t.construct(Chart.min.js:11)
      at new t(Chart.min.js:12)
      趋势:507

这是我提出的语法 - 错误在哪里?

var ctx = document.getElementById('canvas').getContext('2d');
var chart = new Chart(ctx, {
    data: {
        labels: labelsarr,
        datasets: [{  
                type: 'line',
                fill: false,
                label: 'Line Example',
                backgroundColor: 'rgba(255,0,0,1)',
                borderColor: 'rgba(255,0,0,1)',
                data: linedata

            }, {
                type: 'bar',
                label: 'Bar Example',
                backgroundColor: 'rgba(0, 129, 214, 0.8)',
                data: bardata
            }]
    },
    options: {
        tooltips: {
            callbacks: {
                label: function (t, d) {
                    var xLabel = d.datasets[t.datasetIndex].label;
                    var yLabel = t.yLabel >= 1000 ? '$' + t.yLabel.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") : '$' + t.yLabel;
                    return xLabel + ': ' + yLabel;
                }
            }
        },
        legend: {
            display: false,
            position: 'top',
        },
        scales: {
            yAxes: [{
                    ticks: {
                        beginAtZero: true,
                        callback: function (value, index, values) {
                            if (parseInt(value) >= 1000) {
                                return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                            } else {
                                return '$' + value;
                            }
                        }
                    }
                }]
        }
    },
    plugins: [{
                beforeDraw: function(chart) {
                   var labels = chart.data.labels;
               }
        }]
});

修改
这是数组的填充方式 - 从PHP传递的值

        var ldata = <?php echo $ldata; ?>;
        var values = [];
        for (var i = 0; i < ldata.length; i++) {
            values.push(ldata[i]);
        }
        var bdata = <?php echo $bdata; ?>;
        var values1 = [];
        for (var i = 0; i < bdata.length; i++) {
            values1.push(bdata[i]);
        }

1 个答案:

答案 0 :(得分:1)

您必须在主图表选项中设置图表 type dataset 内的不是 (第二个)

var chart = new Chart(ctx, {
   type: 'bar',
   data: {
      ...

以下是您的代码的工作版本:

&#13;
&#13;
var labelsarr = ['A', 'B', 'C'];
var linedata = [2, 5, 3];
var bardata = [4, 2, 6];

var ctx = document.getElementById('canvas').getContext('2d');
var chart = new Chart(ctx, {
   type: 'bar', //<-- set here
   data: {
      labels: labelsarr,
      datasets: [{
         type: 'line',
         fill: false,
         label: 'Line Example',
         backgroundColor: 'rgba(255,0,0,1)',
         borderColor: 'rgba(255,0,0,1)',
         data: linedata

      }, {
         label: 'Bar Example',
         backgroundColor: 'rgba(0, 129, 214, 0.8)',
         data: bardata
      }]
   },
   options: {
      tooltips: {
         callbacks: {
            label: function(t, d) {
               var xLabel = d.datasets[t.datasetIndex].label;
               var yLabel = t.yLabel >= 1000 ? '$' + t.yLabel.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") : '$' + t.yLabel;
               return xLabel + ': ' + yLabel;
            }
         }
      },
      legend: {
         display: false,
         position: 'top',
      },
      scales: {
         yAxes: [{
            ticks: {
               beginAtZero: true,
               callback: function(value, index, values) {
                  if (parseInt(value) >= 1000) {
                     return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                  } else {
                     return '$' + value;
                  }
               }
            }
         }]
      }
   },
   plugins: [{
      beforeDraw: function(chart) {
         var labels = chart.data.labels;
      }
   }]
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="canvas"></canvas>
&#13;
&#13;
&#13;