Я использую Laravel 5.6. Эта страница у меня не работал.
pizza / index.blade.php выглядит так:
@extends('layouts.app')
@section('content')
<!-- Styles -->
<link href = "{{ asset('css/pizza.css') }}" rel = "stylesheet">
<!-- Scripts -->
<script src = "{{ asset('js/components/pizza.js')}}"></script>
<div class = "container">
<div class = "row justify-content-center">
<div class = "card">
<div class = "card-header">Pizza</div>
<div class = "card-body">
<form action = "/pizzas" method = "post">
@if ($errors->any())
<div class = "alert alert-danger" role = "alert">
Please fix the following errors
</div>
@endif
@include('pizza.table')
</form>
</div>
</div>
</div>
</div>
@endsection
пицца / table.blade.php:
<div class = "pizza-selection">
<b>Thanks god its pizza day! Select your pizza of the day!</b>
<table id = "pizzas" class = "md-box">
<tr>
...
</tr>
@foreach ($pizzas as $pizza)
...
@endforeach
<tr>
...
<input type = "button" class = "md-box btn btn-default"
id = "add_new_pizza" onClick = "addPizza()" value = "Add Pizza!">
</td>
</tr>
</table>
...
Я получаю справочную ошибку, когда нажимаю кнопку «add_new_pizza», onClick = «addPizza ()», addPizza () не определен. Однако я пытаюсь импортировать pizza.js в index.blade.php
<script src = "{{ asset('js/components/pizza.js')}}"></script>
распечатка ресурса ('js / components / pizza.js') возвращает http: // локальный: 8080 / js / компоненты / pizza.js, который мне кажется правильным.
public / js / components / pizza.js выглядит следующим образом:
import PizzaService from '../services/PizzaService.js';
async function addPizza(){
// some functionality
}
Это также работало, когда у меня была функция addPizza () внутри скрипта на .blade.php.
Также найдите репозиторий на GitHub, если вам понадобится дополнительная проверка кода: https://github.com/andrelandgraf/laravel-docker
Обновлено: когда я копирую pizza.js внутри <script><script>, он работает нормально, но я получаю SyntaxError: import declarations may only appear at top level of a module. Эта ошибка SyntaxError исчезает, когда я импортирую скрипт через src, как вы можете видеть в моих примерах кода. Для меня это означает, что скрипт вообще не загружается.
EDIT2 и решение: я использовал решение @kerbholz. Я добавил @stack('scripts') в нижнюю часть body в app.blade.php и внутри @section('content') из index.blade.php, я знаю @push('stack') файл pizza.js.
Я сделал еще один шаг, но все еще получаю SyntaxError, указанное в EDIT. Есть ли обходной путь для этого, или мне просто нужно удалить импорт PizzaService.js и добавить <scipt>-Tag для этого файла?
EDIT3: Хорошо, эта проблема не связана. Похоже, что модули ES6 еще не поддерживаются браузерами.
@kerbholz большое спасибо, я этого не знал. Я только начал использовать laravel. Я отредактировал свой вопрос, чтобы исправить эту проблему, но все равно получаю то же сообщение об ошибке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Все, что находится за пределами вашего блока @section, не будет отображаться.
Вы можете отредактировать свой layouts/app.blade.php и добавить @stack('head') там, где вы хотите, чтобы ваши стили / javascript отображались (желательно в разделе <head> вашего HTML).
В любом файле лезвия, который @extends('layouts.app'), вы можете затем использовать
@push('head')
<!-- Styles -->
<link href = "{{ asset('css/pizza.css') }}" rel = "stylesheet">
<!-- Scripts -->
<script src = "{{ asset('js/components/pizza.js')}}"></script>
@endpush
чтобы поместить содержимое в этот стек.
Для получения дополнительной информации посетите https://laravel.com/docs/5.6/blade#stacks
Спасибо за ответ. Я отредактировал свой вопрос и поместил два сценария в @section, но все равно получаю ту же ошибку. Когда я пробую ваше решение, оно отключает мой css, и я получаю ту же ошибку, что и раньше, в отношении функции addPizza. Я также попытался добавить @stack ('scripts') в заголовок app.blade.php и нажать на скрипты ...
У меня обычно @stack('head') в голове и @stack('scripts') в конце app.blade.php. Я бы сделал это так, чтобы создать файл resources/assets/js/_pizza.js, а затем require('./pizza'); в моем app.js. (И, конечно же, загрузить app.js в мой app.blade.php)
Спасибо за вашу поддержку @kerbholz. Теперь он у меня работает. push('scripts') у меня работал!
Это так раздражает, что я не могу связаться с вами напрямую через личное сообщение или что-то в этом роде. Тем не менее, это сработало для меня, поэтому я перестал думать об этом, но мне было интересно, так как я прочитал ваш комментарий. Как вы используете require ('./ pizza') в laravel? Насколько мне известно, require исходит от nodejs и недоступен в обычном js, верно?
@Andre require недоступен в простом JS, верно. Думаю, это из webpack / смешивание.
War mir ein Vergnügen;)
импортировать файл js в голову - плохая практика
Вот почему существует "Обычно у меня есть @stack ('голова') в голове и @stack ('scripts') в конце app.blade.php."
Попробуйте переместить pizza.js в конец index.blade.php
@section('extra-script')
{{Html::script('js/components/pizza.js')}}
@endsection
Надеюсь, поможет.
Спасибо за ответ! Я видел Html :: раньше, но он недоступен в шаблоне blade.php. Откуда вы берете класс Html?
Ваш config / app.php должен содержать следующий код в массиве поставщиков 'providers' => [ Collective\Html\HtmlServiceProvider::class, ], а псевдонимы должны содержать 'aliases' => [ 'Form' => Collective\Html\FormFacade::class, 'HTML' => Collective\Html\HtmlFacade::class, ]. Вы также можете добавить: <script src = "{{asset ('js / components / pizza.js')}}"> </ script > если html не работает.
Я вижу, что Laravel Collective - это еще один упаковка, который у меня не установлен.
Я использовал asset () сейчас в вашем решении, я все еще получаю ту же ошибку ...
Конечно, но они не особо помогают: веб-консоль говорит: ReferenceError: addPizza is not defined. onClick localhost:8080/pizzas:1:1
Для пользовательских скриптов на определенной странице,
добавить @yield('footer-scripts') к layouts/app.blade.php
создать папку с именем 'scripts' в папке просмотров
внутри папки views/scripts создайте файл 'pizza-script.blade.php' и добавьте содержимое файла js внутрь
<script src = "/path/to/pizza.js" /> <!-- it might not work if path isn't clear -->
<script type = "text/javascript">
console.info('executing js here..')
js file contents....
#if jquery needed add it like,
$(document).ready(function(){
...
}
</script>
в вашем index.blade.php (или странице, где вы хотите, чтобы скрипты выполнялись) в конце добавьте скрипт после @endsection
@section('footer-scripts')
@include('scripts.pizza-script')
@endsection
теперь обновите страницу, вы увидите 'executing js here..' на консоли.
Все, что находится за пределами вашего блока
@section, не будет отображаться.