在javascript数组中动态添加数据
我有一个控制器:在javascript数组中动态添加数据,javascript,laravel,Javascript,Laravel,我有一个控制器: public function main() { $user=User::find(1); return view('home')->with('user',$user); } public function main() { $user = User::find(1); $data = [ 'user' => $user, 'dataChart' => [$user->trav
public function main()
{
$user=User::find(1);
return view('home')->with('user',$user);
}
public function main()
{
$user = User::find(1);
$data = [
'user' => $user,
'dataChart' => [$user->travel, $user->food, $user->misc]
];
return view('home', $data);
}
在home.blade.php视图中,我需要获取用户的属性travel、food、misc。我可以使用$user->travel、$user->food、$user->misc得到那些整数。
但是,我必须在饼图中显示这些费用。所以,我用
这将显示静态数据300、50和100。如何动态添加这些数据?我需要数据:[300,50,100],类似于数据:[$user->travel,$user->food,$user->misc],使用相同的符号:
data: [{{$user->travel}}, {{$user->food}}, {{$user->misc}}]
这样,模板引擎将呈现值,当加载到浏览器中时,javascript将使用它。使用相同的符号:
data: [{{$user->travel}}, {{$user->food}}, {{$user->misc}}]
这样,模板引擎将呈现值,当加载到浏览器中时,javascript将使用它。尝试:
<?php
$travel = $user->travel;
$food = $user->food;
$misc = $user->misc;
$data = "[$travel,$food,$misc]";
?>
Travel Expenses:{{$travel}}<br>
Food Expenses:{{$food}<br>
Miscellaneous Expenses:{{$misc}}<br>
<canvas id="myChart"></canvas>
<script>
var ctx = document.getElementById("myChart");
var data = {
labels: labels: [
"Travel",
"Food",
"Miscellaneous",
datasets: [
{
data: {{$data}},
backgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
]
}]
};
</script>
尝试:
您可以在控制器中执行类似操作:
public function main()
{
$user=User::find(1);
return view('home')->with('user',$user);
}
public function main()
{
$user = User::find(1);
$data = [
'user' => $user,
'dataChart' => [$user->travel, $user->food, $user->misc]
];
return view('home', $data);
}
在你看来:
<script>
var ctx = document.getElementById("myChart");
var data = {
labels: [
"Travel",
"Food",
"Miscellaneous"
],
datasets: [{
data: {{$dataChart}},
backgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
]
}]
};
</script>
这就解决了您的问题。您可以在控制器中执行类似操作:
public function main()
{
$user=User::find(1);
return view('home')->with('user',$user);
}
public function main()
{
$user = User::find(1);
$data = [
'user' => $user,
'dataChart' => [$user->travel, $user->food, $user->misc]
];
return view('home', $data);
}
Travel Expenses:<span id='travel'>{{$user->travel}}</span><br>
Food Expenses:<span id='food'>{{$user->food}}</span><br>
Miscellaneous Expenses:<span id='misc'>{{$user->misc}}</span>
<canvas id="myChart"></canvas> <script>
var ctx = document.getElementById("myChart");
var data = {
labels: [
"Travel",
"Food",
"Miscellaneous"
],
datasets: [ {
data: [
document.getElementById('travel').innerHTML,
document.getElementById('food').innerHTML,
document.getElementById('misc').innerHTML],
backgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ],
hoverBackgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ]
}]
};
</script>
Try this.
在你看来:
<script>
var ctx = document.getElementById("myChart");
var data = {
labels: [
"Travel",
"Food",
"Miscellaneous"
],
datasets: [{
data: {{$dataChart}},
backgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
]
}]
};
</script>
这就解决了你的问题。我不懂PHP,但你需要做的就是从PHP服务器内联渲染它们,所以我猜[{{{$user->travel},{{$user->food},{{{$user->misc}}]直接在你的javscript代码中,PHP将渲染出300,50100Cleary我懂PHP!我不懂PHP,但你所需要做的就是从PHP服务器内联呈现它们,所以我猜[{{$user->travel},{{{$user->food},{{{$user->misc}]直接在你的javscript代码中,PHP将呈现300,50100Cleary我知道PHP!
Travel Expenses:<span id='travel'>{{$user->travel}}</span><br>
Food Expenses:<span id='food'>{{$user->food}}</span><br>
Miscellaneous Expenses:<span id='misc'>{{$user->misc}}</span>
<canvas id="myChart"></canvas> <script>
var ctx = document.getElementById("myChart");
var data = {
labels: [
"Travel",
"Food",
"Miscellaneous"
],
datasets: [ {
data: [
document.getElementById('travel').innerHTML,
document.getElementById('food').innerHTML,
document.getElementById('misc').innerHTML],
backgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ],
hoverBackgroundColor: [ "#FF6384", "#36A2EB", "#FFCE56" ]
}]
};
</script>
Try this.