En el archivo config/variables.php he definido los siguientes objetos como un arreglo multidimensional:
<?php return [ [ 'name' => 'test1', 'surname' => 'test1' ], [ 'name' => 'test2', 'surname' => 'tes2' ], [ 'name' => 'tes3', 'surname' => 'test3' ] ];Quiero usar estos datos en un componente Vue, por ejemplo, así:
<template> <div> <div>Items:</div> <div v-for="i of items"> {{ i.name }} {{ i.surname }} </div> </div> </template> <script> export default { name: "Test", props: { items: [] } } </script>Reúno el componente y los datos en una plantilla de hoja que contiene, entre otros, esto:
<div>Begin of test</div> <Test :items="@json(Config::get('variables'))"></Test> <div>End of test</div>Espero que Laravel pase los datos al componente que luego muestra una página simple que contiene los divs con los datos proporcionados. Lo que realmente veo en el navegador es esto:
<div>Begin of test</div> ":"test1","surname":"test1"},{"name":"test2","surname":"tes2"},{"name":"tes3","surname":"test3"}]"=""> <div>End of test</div> Por un lado, los datos parecen distorsionarse en el proceso. Además, los <div>Items:</div> del componente no aparecen en absoluto. Entonces parece que la llamada @json alguna manera rompe todo el componente. Mismo comportamiento usando {!! json_encode(Config::get('variables')) !!} en su lugar. Cuando acabo de enviar los valores de configuración directamente a un div como <div>@json(Config::get('variables'))</div> , la matriz completa se imprime limpiamente como JSON.
¿Por qué sucede esto y cómo puedo solucionarlo?
¡Ya casi has llegado!
Acaba de olvidar escapar del PHP en el elemento en su vista de hoja.
Debería ser;
<div>Begin of test</div> <Test :items="{{ json_encode(Config::get('variables')) }}"></Test> <div>End of test</div> Si desea usar la etiqueta @json , debe eliminar las comillas dobles. Ejemplo;
<div>Begin of test</div> <Test :items=@json(Config::get('variables'))></Test> <div>End of test</div> No soy un experto en JS, pero creo que esto se debe a que al pasar a :items (un atajo para v-bind) se trata como una expresión de JavaScript.
Actualiza tus variables.php
<?php $return = array( array( 'name' => 'test1', 'surname' => 'test1' ), array( 'name' => 'test2', 'surname' => 'tes2' ), array( 'name' => 'tes3', 'surname' => 'test3' ) ); echo json_encode($return);