laravel-admin统计图表chartjs柱状图显示格式问题

3 篇文章 1 订阅
1 篇文章 0 订阅

一个坑掉进两次,还是记录一下比较稳妥。。。
在这里插入图片描述
在这里插入图片描述
chartjs.blade.php

<canvas id="myChart1" width="400" height="200"></canvas>
<script>
    $(function () {
        var ctx = document.getElementById("myChart1").getContext('2d');
        var myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: <?php echo empty($chart_res['lab_up']) ? '' : $chart_res['lab_up']; ?>,
                datasets: [{
                    label: '<?php echo $chart_res['title']; ?>',
                    //数据类型 柱状图
                    type: "bar",
                    data: [{{ empty($chart_res['data_up'])?'':$chart_res['data_up'] }}],
                    backgroundColor: [
                        <?php echo empty($chart_res['rgba']) ? '' : $chart_res['rgba'];?>
                    ],
                    borderColor: [
                        <?php echo empty($chart_res['rgba_border']) ? '' : $chart_res['rgba_border'];?>
                    ],
                    borderWidth: 1
                }
                ]
            },

            options: {        //显示数值
                "animation": {
                    "duration": 100,
                    "onComplete": function () {
                        var chartInstance = this.chart,
                                ctx = chartInstance.ctx;

                        ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);            //设置字体颜色
                        ctx.fillStyle = "black";
                        ctx.textAlign = 'center';
                        ctx.textBaseline = 'bottom';

                        this.data.datasets.forEach(function (dataset, i) {
                            var meta = chartInstance.controller.getDatasetMeta(i);
                            meta.data.forEach(function (bar, index) {
                                var data = dataset.data[index];
                                ctx.fillText(data, bar._model.x, bar._model.y - 5);
                            });
                        });
                    }
                },
                scales: {
                    yAxes: [{
                        ticks: {
                            callback: function (value, index, values) {
                                return value + '%';
                            }

                        }
                    }]
                }
            }
        });
    });
</script>

ChartjsController.php

use Encore\Admin\Widgets\Box;

$chart_res['lab_up'] = urldecode(json_encode($title_res_encode));
$chart_res['data_up'] = implode(',',$data_res);
$chart_res['rgba']='';
$chart_res['rgba_border']='';
$rgb = 1;
//颜色渐变
for($i=0;$i<count($data_res);$i++){
    $chart_res['rgba'] .= "'rgba(255, 99, 132, ".$rgb.")',";
    $chart_res['rgba_border'] .= "'red',";
    $rgb -= 0.02;
}
$doughnut = view('admin.chartjs',compact('chart_res'));
return new Box('柱状图', $doughnut);

其中x轴显示格式为:

// x轴显示的label
labels:['1月', '2月', '3月', '4月', '5月', '6月', '7月']

然而返回的数据格式为

"1月, 2月, 3月, 4月, 5月, 6月, 7月"
或
"'1月', '2月', '3月', '4月', '5月', '6月', '7月'"

傻乎乎的没反应过来转json~终于想起来了。。。

json_encode()后格式变成了这样

["\u6c38\u5eb7\u80e1\u540c1\u53f7\u9662","\u77e5\u6625\u8def2\u53f7\u9662","\u5357\u534e\u4e1c\u8857","\u65b0\u5965\u6d0b\u623f"]

还是不符合。。。

	$title_res_encode = [];
	foreach($title_res as $title){
		//url编码,避免json_encode将中文转为unicode
	    $title_res_encode[]=urlencode($title);
	}
	 //url解码,转完json后将各属性返回,确保对象属性不变
	 $labels=urldecode(json_encode($title_res_encode));

前端调用

labels: <?php echo empty($chart_res['lab_up']) ? '' : $chart_res['lab_up']; ?>,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值