从控制器传递数据到JavaScript

4
我希望将数据从我的控制器传递给处理Google Bar图表的JavaScript。

composer

$tmp = 6;
return view('pages.template', ['tmp' => $tmp]);

我从template.blade.php中调用Google图表。

<div id="chart_div"></div>

.js文件:

var tmp = 6;
var tmp2 = parseInt('{!! $tmp !!}');

var data = google.visualization.arrayToDataTable([
    ['comment1', 'comment2'],
    ["- 6 days", tmp],
    ["- 5 days", tmp2],
    ["- 4 days", 31],
    ["- 3 days", 12],
    ["- 2 days", 10],
    ["- 1 day", 3],
    ["today", 4]

谷歌柱状图中的第二根条形图为空....但应该显示我的变量。我该如何解决这个问题?在此输入图像描述

也许你可以尝试使用Brandon在这里的回答,因为我认为你正在尝试在链接的.js文件中使用php变量,这是行不通的。"here" - Kevin P.
4个回答

2
只需要替换 :
var tmp2 = parseInt('{!! $tmp !!}');

通过:

var tmp2 = parseInt(<?php echo $tmp; ?>);

它应该能够正常工作。


0

您正在尝试在JS文件中使用Blade语法。为了使其正常工作,该文件需要通过Blade编译器进行处理。这意味着,您需要包含一个URL,由Laravel处理并输出Javascript代码,而不是直接将JS文件包含在您的网站中。虽然这是可能的,但通常不是一个好的选择。与直接从服务器获取轻量级JS文件不同,Laravel需要处理额外的请求

您需要做的是:

  1. 将您的Javascript放入Blade模板中
  2. 创建一个控制器操作

    class JavascriptController extends Controller {
      public function javascript() {
        $tmp = 6;
        return view('javascript', ['tmp' => $tmp]);
      }
    }
    
  3. 在您的routes.php中添加一个路由到该操作

    Route::get('/javascript', 'JavascriptController@javascript');
    
  4. 不要包含原始Javascript文件,而是包含一个将执行此控制器操作的URL

    <script src="{{route(javascript)}}"></script>
    

0

这对我有用

<script type="text/javascript">

var tmp = {!! json_encode($tmp->toArray()) !!};
console.log(tmp);

</script>

在您的控制器中,您可以执行以下操作:
public function index()

{

$tmp = Tmp::get();

return view('tmp.index', compact('tmp'));

}

-1

变量$tmp.js文件中似乎没有成功解析。为什么不将.js文件中的代码放入template.blade.php中呢?


我认为将JavaScript塞入视图文件以强制其工作并不是最佳方法。 - John Corry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接