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
pizza/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()未定义。然而,我尝试在index.blade.php中导入pizza.js文件。
<script src="{{ asset('js/components/pizza.js')}}"></script>
将文本翻译成中文:
打印出asset('js/components/pizza.js')返回http://localhost:8080/js/components/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
。当我像代码示例中所看到的那样通过src导入脚本时,这个SyntaxError就消失了。对我来说,这表明根本没有加载脚本。
编辑2和解决方案:我使用了@kerbholz的解决方案。我在app.blade.php的底部添加了@stack('scripts')
,并在index.blade.php的@section('content')
内使用@push('stack')
来引入pizza.js
文件。
PizzaService.js
的导入并为该文件添加<scipt>-Tag
?编辑3:好吧,这个问题与此无关。看起来浏览器尚未支持ES6模块。
@section
块之外的任何内容都不会被渲染。 - brombeer