如何在脚本文件中使用Laravel Blade?

2022-08-30 17:39:27

我正在尝试使用本教程和Laravel 5制作商店定位器应用程序。在这些问题中,人们似乎正在使用@foreach循环和其他叶片模板语言来运行他们的纬度/经度坐标。他们是怎么做到的?

当我的地图代码在js文件中时,我基本上不知道如何使用刀片遍历坐标?这怎么可能?我做错了什么吗?

我用一个js文件(maps.js)显示我的地图,该文件具有以下代码:

function initialize() {

var map_canvas = document.getElementById('map');

// Initialise the map
var map_options = {
    center: location,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(map_canvas, map_options)

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ {{ $article->lat }}, {{ $article->lng }} ]     
@endforeach
];

for (i = 0; i < locations.length; i++) {
    var location = new google.maps.LatLng(locations[i][0], locations[i][1]);

    var marker = new google.maps.Marker({
        position: location,
        map: map,
    }); 
}

// marker.setMap(map); // Probably not necessary since you set the map above

}

但显然,这被困在@foreach线上。

PS:如果有人使用Laravel 5学习了本教程,我将不胜感激有关此部分的任何信息:使用PHP输出XML。


答案 1

无法在外部 Javascript 文件中使用 Blade 模板。

Laravel只能将数据传递到视图/模板;Javascript文件在外部加载,因此应用程序数据不会传递给它们。

为了解决此问题,您需要在 Blade 模板文件中创建标记:<script>

{{-- Code in your template file, e.g., view.blade.php --}}

<script type="text/javascript">

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ "{{ $article->lat }}", "{{ $article->lng }}" ], 
@endforeach
];

// NOTE: I've added a comma which will be needed to delimit each array within the array.
//       Quotes will also be needed since lat and long are not integers.

</script>

请确保此代码段位于包含文件的代码之前。如果您已将文件包含在代码中,则需要将该包含代码段向下移动到页面底部。maps.jsmaps.js<head>

然而,这是一个相当基本的解决办法。更好的方法是在初始化时使用 AJAX 从文件中检索数据。maps.js

当然,这将要求您创建一个新的 Controller 方法和相应的路由来处理请求并返回所需的数据。


答案 2

您可以从该对象创建一个对象,例如,查看以下代码:JavaScriptEloquent

// index.blade.php
<script>var userObj = {{ $authUser or 'undefined' }}</script>

这是一个视图,我只是使用类似这样的东西加载并传递到视图(使用视图编辑器):bladeviewcollection

View::composer('layouts.master', function($view) {
    $user = null;
    if(Auth::check()) {
        $user = Auth::user();
    }
    $view->with('authUser', $user);
});

所以,在我的I中,所以我可以很容易地将其转换为对象,例如:view$authUserJS

<script>var userObj = {{ $authUser or 'undefined' }}</script>

所以现在,我可以把它用作变量(JavaScript)中的对象。看看近一年前写的这篇文章。JSuserObjLaravel-4