Tengo una función javascript como esta:
function addRow(){ $('#mainbody').append('<tr>' + '<td><select class="form-control" name="addmore['+i+'][name]" id="name'+i+'" required >' + '<option disabled="disabled" selected="selected" value="" >Select Product</option>' + '@foreach($produk as $pro)' + '<option value="{{$pro->id}}">{{$pro->nama}}</option>' + '@endforeach' )}Cuando uso el script en el mismo archivo blade (vista), funciona, pero cuando separo la función javascript e incluyo el script en el encabezado, muestra la sintaxis blade literalmente como {{ $pro->id }} (no el número real del controlador, pero agrega una nueva fila con {{ $pro->name }} como valor).
Entonces mi pregunta es, ¿puedo crear un archivo separado para mi función javascript? Debido a que estoy usando el script en la vista de creación y edición, quiero que mi vista sea más limpia.
El motor de plantillas de Laravel no puede compilar archivos javascript, pero puede escribir su código javascript dentro del archivo blade. agregue su secuencia de comandos dentro de la hoja, coloque sus datos en formato json variable y luego haga un bucle para cada uno de los elementos que desee
Prueba este ejemplo.blade.php
<script type="text/javascript"> let produk = {!! json_encode($produk) !!}; function addRow(){ var tr = $('<tr></tr>'); var select = $(`<select class="form-control" name="addmore[]" required ></select>`); for(const pro in produk) { var td = $(`<option value="${ pro->id }">${ $pro->name }</option>`); select.append(td); } tr.append(select); $('#mainbody').append(tr); } </script>Debe asignar la variable js de la variable $produk cuando se haya iniciado este archivo blade.
El siguiente código puede representar los datos $produk en la variable de tipo de datos JS const.
const produk = @json($produk) Entonces puedes hacer foreach dentro de la etiqueta de select
produk.forEach(element => { // ...use `element`... });