如何将 javascript 回调传递给 Laravel-Charts 中的 PHP 结构

How can I pass a javascript callback to a PHP construct in Laravel-Charts

我在 Laravel 7 中使用 laravel-charts 包。我将 chartjs 的数据标签插件添加到图表对象中,如下所示:

$this->options = [
    'responsive' => true,
    'maintainAspectRatio' => false,
    'legend' => [ 'display' => false ],
    'plugins' => [
        'datalabels' => [
            'color' => 'white',
            'weight' => 'bold',
            'font' => ['size' => 14],
            'formatter' => ''     
    ]
]

在另一个版本中,当我使用 vue.js 和 vue-chartjs 时,我可以使用这个来格式化标签:

plugins: {
    datalabels: {
        formatter: function(value, context) {
            return '$' + Number(value).toLocaleString();
         },
   }
}

如您所见,javascript 作为 PHP 数组传递。我不知道如何将该格式化程序传递给我的 laravel-charts 版本。

非常感谢任何帮助。

Laravel Charts plugins option has to be a string that's representing a plain Javascript object. I couldn't find any actual documentation, but you can read a related issue here "How to use ChartsJs plugin Datalabels js?".

你必须这样传递:

$chart = new ChartTest;
$chart->labels(['One Thousand', 'Two Thousand', 'Three Thousand', 'Four Thousand']);
$chart->dataset('My dataset', 'bar', [1000, 2000, 3000, 4000]);

$chart->options([
    // The whole plugins element is a string representing a JS object with plugins options
    'plugins' => "{
        datalabels: {
            color: 'red',
            font: {
                size: 14,
                weight: 'bold'
            },
            formatter: (value) => `\$${value}`
        }
    }"
]);

return view('chart', ['chart' => $chart]);

将应用 chartjs-plugin-datalabels 个选项:

PSweight 属性 必须在 font 对象内部,就像我的例子一样。