Wie verwende ich Laravel Blade in einer Skriptdatei?

Lesezeit: 4 Minuten

Benutzeravatar von thomas jaunism
Thomas Jaunismus

Ich versuche, eine Store-Locator-App damit zu erstellen Lernprogramm und Laravel 5. Die Leute in diesen Fragen Here und Here scheinen @foreach-Schleifen und andere Blade-Vorlagensprachen zu verwenden, um ihre Lat/Long-Koordinaten zu durchlaufen. Wie machen sie das?

Ich weiß im Grunde nicht, wie ich Koordinaten mit Blade durchlaufen soll, wenn sich mein Kartencode in einer js-Datei befindet? Wie ist das möglich? Mache ich etwas total falsch?

Ich zeige meine Karte mit einer js-Datei (maps.js) mit folgendem Code:

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

}

Aber offensichtlich bleibt das in der @foreach-Zeile hängen.

PS: Wenn jemand dieses Tutorial mit Laravel 5 befolgt hat, wäre ich für Informationen zu diesem Teil dankbar: Ausgabe von XML mit PHP.

Benutzeravatar von heisian
heisisch

Es gibt keine Möglichkeit, Blade-Vorlagen innerhalb einer externen Javascript-Datei zu verwenden.

Laravel kann nur Daten an eine Ansicht/Vorlage übergeben; Javascript-Dateien werden extern geladen und daher werden keine App-Daten an sie weitergegeben.

Um dies zu umgehen, müssen Sie erstellen <script> Tags in Ihrer Blade-Vorlagendatei:

{{-- 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>

Stellen Sie sicher, dass dieses Snippet kommt Vor der Code zum Einschließen Ihrer maps.js Datei. Wenn Sie die eingeschlossen haben maps.js Datei in Ihrer <head> -Tags müssen Sie dieses Einschluss-Snippet an das Ende der Seite verschieben.

Dies ist jedoch eine eher rudimentäre Lösung. Ein besserer Weg wäre, AJAX zu verwenden, um die Daten aus Ihrem abzurufen maps.js Datei bei der Initialisierung.

Dazu müssten Sie natürlich eine neue Controller-Methode und eine entsprechende Route erstellen, die die Anforderung verarbeiten und die erforderlichen Daten zurückgeben kann.

  • Das hat bei mir perfekt funktioniert! Aber gibt es eine Möglichkeit, dies mit mehreren Variablen zu tun? Zum Beispiel, wenn ich Inhalte in jeden der Marker einfügen wollte. Wie könnte ich das tun?

    – Brad Ahrens

    28. August 2017 um 16:47 Uhr

  • was meinst du? In Ihrem Controller könnten Sie einfach mehr Variablen übergeben view('myView', ['variable1' => $variable1, 'variable2' => $variable2, etc...]);

    – Heisian

    28. August 2017 um 21:33 Uhr


  • Ja, ich möchte separate Arrays in die Variablenpositionen einfügen. Zum Beispiel möchte ich für jeden Standort auch den Titel des Standorts und einige andere Informationen einfügen. Nachdem ich diesen Beitrag gesehen habe, habe ich eine weitere Frage in dieser Hinsicht gepostet. Vielleicht hilft dies, meine Frage zu klären: stackoverflow.com/questions/45924237/…

    – Brad Ahrens

    28. August 2017 um 22:23 Uhr

Sie können eine erstellen JavaScript Objekt aus der Eloquent Objekt, sehen Sie sich zum Beispiel den folgenden Code an:

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

Das ist ein blade ansehen und ich lade gerade die view und vorbei an der collection zur Ansicht mit so etwas (Using a Komponist ansehen):

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

Also in meinem view Ich habe $authUser damit ich es umwandeln kann JS Objekt einfach wie:

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

Jetzt kann ich es als verwenden JS Objekt, das drin ist userObj Variable (JavaScript). Überprüfen dieser Artikel von mir für die ich vor fast einem Jahr geschrieben habe Laravel-4.

In den von Ihnen bereitgestellten Beispielen verwenden sie blade, da sie sich in einer Blade-Datei befinden und sich das gesamte JavaScript zwischen Tags befindet. Es ist kein .js-Dateityp, daher können Sie die Funktionen der Blade-Sprache auf diese Weise verwenden.

1440610cookie-checkWie verwende ich Laravel Blade in einer Skriptdatei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy