web-dev-qa-db-fra.com

Passage (laravel) Array en Javascript

Je veux passer/stocker Laravel tableau dans la variable JavaScript. J'ai utilisé ->all() donc j'obtiens le résultat comme ceci plutôt que objet:

array:83 [▼
  0 => 1
  1 => 11
  2 => 12
  ...
]

Je peux y accéder en vue en utilisant {{ $theArray }}.

Cependant, quoi que j'aie essayé, je n'ai pas pu le faire dans un tableau javascript.

J'ai essayé

var array = {{ $theArray }};

var array = {{{ $theArray }}};

J'ai l'impression d'être proche mais je n'ai pas pu le comprendre

16
senty
var app = @json($array);

Fonctionne comme un charme

43
Alex Alekser

vous pouvez utiliser json_encode()

var array = {{ json_encode($theArray) }};

ou analyser la chaîne json en utilisant JSON.parse()

var array = JSON.parse('{{ json_encode($theArray) }}');
20
Pranav C Balan

vous avez entouré de guillemets ou utilisez json_encode ()

var array = "{{ $theArray }}";
            ^               ^

ou, si la valeur dans une array()

var array = "{{ json_encode($theArray) }}";
            ^                            ^

Sans avoir de guillemets autour de la variable javascript, cela vous générera une erreur. vous pouvez vérifier dans votre console.

3
Niranjan N Raju

Cela fonctionne pour moi :)

var array =  {!! json_encode($theArray) !!};
2
Francisca GV

celui-ci a fonctionné pour moi.

let array = JSON.parse('{!! json_encode($array) !!}');

2
Ajay

Simplement, échappez aux caractères spéciaux en utilisant la syntaxe de la lame. Essaye ça.

var array = {!! $theArray !!};

De plus, vous n'avez pas besoin de l'analyser dans sa forme d'objet en JavaScript.

1
Aman

Parfois, vous pouvez passer un tableau à votre vue avec l'intention de le rendre en JSON afin d'initialiser une variable JavaScript. Par exemple:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>

Cependant, au lieu d'appeler manuellement json_encode, Vous pouvez utiliser la directive Blade @json. La directive @json Accepte les mêmes arguments que la fonction json_encode De PHP:

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>

La directive @json Est également utile pour amorcer les composants Vue ou les attributs data- *:

<example-component :some-prop='@json($array)'></example-component>

https://laravel.com/docs/5.8/blade#blade-and-javascript-frameworks

1
Zain

Parfois, all() ne suffit pas pour convertir votre collection Laravel en tableau. J'ai rencontré ce problème en essayant de transmettre la collection d'objets de type personnalisé à JS via Laravel view.

Pour obtenir le tableau sur le front end JS, vous devez appliquer la méthode Collection::values() avant la méthode all() .

Alors:


// In your HTTP controller
$collection = collect([myObj1,myObj2]); // The collection filled with custom type objects.

$myArray = $collection->values()->all(); // Then converted to an array. Just `all()` is not enough;

return view('myview', $myArray);
{{-- In your myview.blade.php --}}

<script>window.myArray= @json($myArray)</script>

Ensuite, dans votre JS window.myArray, Vous obtenez un tableau [], Pas un objet {}.

Un peu de détails

Cela est probablement dû au fait que lorsque les index d'un tableau ne sont pas ascendants ordonnés PHP considère les index comme des clés d'objet, il considère alors le tableau comme un objet. Ainsi, la transformation en un au lieu d'un tableau. Laravel collection values() réinitialise les clés du tableau. Je soupçonne qu'il s'applique PHP array_values() sous le capot.

0
Valentine Shi