Интерпретировать переменную в файле Javascript Laravel
Мне нужно включить файл JS в мои представления.
Но в этом файле JS мне нужно интерпретировать некоторую переменную PHP.
На самом деле я делаю это:
@section('javascript')
<script>
alert("{{{test}}}");
</script>
@stop
Но мне действительно нужно сделать это:
@section('javascript')
{!! Html::script('js/test.js') !!}
@stop
test.js:
alert("{{{test}}}");
Мне нужно объявить много переменных. Так что мой файл JS будет очень большим. И я не хочу показывать это прямо в исходном коде.
Как я могу сделать? Спасибо!
3 ответа
Вы можете передать переменную только в javascript следующим образом:
@section('javascript')
<script>
var test = {{{$test}}};
</script>
@stop
тогда в вашем javascript-файле внизу вы можете использовать его:
alert(test);
Позвольте мне просто упомянуть, что это не лучший способ обработки передачи переменных из php в javascript.
Когда мне нужно сделать что-то подобное, я обычно создаю метатег на странице, который будет содержать информацию о предупреждении.
<meta name="someAlertValue" content="{{{ $test }}}" />
Тогда вы можете очень легко получить это через jQuery.
var alert_text = $('meta[name=someAlertValue]').attr('content');
Я считаю, что этот подход намного чище и удобнее в обслуживании, чем попытка добавить переменные php прямо в ваш javascript.
У меня была та же проблема, и я хотел иметь отдельный JS, который будет иметь кучу переменных, взятых из config()
или даже из базы данных, многоязычной, и будет настраиваться, или даже будет работать с параметрами запроса. Может быть, это сложный путь, но я создал маршрут:
Route::get('/js-modules/test.js',function(){ return view('js-modules.test');})->name('my_js);
Так по мнению resources/views/js-modules/test.blade.php
Вы можете поместить свой код js вместе с вашими вещами PHP.
Или вы можете направить его к контроллеру и получить еще больше фоновой работы. он выглядит немного медленно (в браузере) при первом запуске, но во втором запросе он будет обналичен и получен как обычный файл js
И теперь вы можете связать его с любой из ваших страниц с
<script src="{{route('my_js')}}"></script>