[英]Passing data from a controller to ChartJS - Laravel
我想将数据从我的laravel控制器传递到chartjs javascript文件。 但是目前,我只能将数据保存到home.blade而不是javascript文件。 以下是我的控制器:
public function index()
{
$visits = Visitdetail::all();
$countVisit = $visits->count();
$totalSchools = School::all()->count();
$totalProjects = Project::all()->count();
$recentVisits = Visitdetail::all()->sortByDesc('created_at')->take(5);
$visitsYear = Visit::where('created_at','>=', Carbon::now()->startOfYear())->take(5)->get();
return view('home',['countVisit'=>$countVisit,'recentVisits'=>$recentVisits, 'totalSchools'=>$totalSchools,'totalProjects'=>$totalProjects,
'yearVisits'=>$visitsYear]);
}
在home.blade上,我只有一块画布,下面是代码:
<div class="box-body">
<div class="chart">
<canvas id="barChart" style="height:227px"></canvas>
</div>
</div>
在chartJS文件上,我有以下代码(文件名:dashboard.js),位于public / js / dashboard.js目录中:
// Get context with jQuery - using jQuery's .get() method.
var barChartCanvas = $('#barChart').get(0).getContext('2d');
// This will get the first returned node in the jQuery collection.
var barChart = new Chart(barChartCanvas);
var barChartData = {
labels : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
datasets: [
{
label : 'Electronics',
fillColor : 'rgba(38,198,218,1)',
strokeColor : 'rgba(38,198,218,0)',
pointColor : '#26c6da',
pointStrokeColor : 'rgba(38,198,218,0)',
pointHighlightFill : '#fff',
pointHighlightStroke: 'rgba(38,198,218,1)',
data : [5, 4, 3, 7, 5, 10, 3]
},
{
label : 'Digital Goods',
fillColor : 'rgba(30,136,229,1)',
strokeColor : 'rgba(30,136,229,0)',
pointColor : 'rgba(30,136,229,0)',
pointStrokeColor : '#1e88e5',
pointHighlightFill : '#fff',
pointHighlightStroke: 'rgba(30,136,229,1)',
data : [3, 2, 9, 5, 4, 6, 4]
}
]
};
我尝试使用动态Blade变量设置数据集的值,在数据上,我有:
data : [{{$countVisits}}, {{recentVisits}}]
但是,这没有用。 任何可以帮助我指出正确方向的帮助将不胜感激。
您无法将Laravel中的变量插入资产文件。 您只能插入视图。 资产应该是在请求中不会改变的部分。
通常的方法是将数据插入视图中,并将其存储在脚本可以访问的全局JS变量中。
即在home.blade.php
执行以下操作:
<script>
var datasets = [@json($countVisits), @json($recentVisits)]
// or using an object
var theDatasets = {
countVisits: @json($countVisits),
recentVisits: @json($recentVisits)
}
//or directly
var countVisits = @json($countVisits)
var recentVisits = @json($recentVisits)
</script>
<!-- include your dashboard.js afterwards -->
然后,您可以按照与存储方式相对应的方式使用dashboard.js
中的变量:
//from array
datasets[0]
//from object
theDatasets.countVisits
//directly
countVisits
解决这个问题的其他方法是
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.