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
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()が定義されていません。しかし、私はpizza.jsをindex.blade.phpにインポートしようとします
<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
}
.blade.phpのスクリプト内に関数addPizza()がある場合にも機能しました。
また、さらにコードレビューが必要な場合は、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ソリューションを使用しました。 app.blade.php
のbody
の下部とindex.blade.php
の@stack('scripts')
の内側に@section('content')
を追加しました。pizza.js
ファイルは@Push('stack')
です。
私はもう一歩進んだのですが、それでもEDITに記載されているSyntaxErrorを受け取ります。そのための回避策はありますか、またはPizzaService.js
のインポートを削除して、このファイルにも<scipt>-Tag
を追加する必要がありますか?
EDIT3:さて、この問題は関係ありません。 ES6モジュールはまだブラウザーでサポートされていないようです。
_@section
_ブロックの外にあるものはレンダリングされません。
_layouts/app.blade.php
_を編集して、スタイル/ JavaScriptを表示する場所に@stack('head')
を追加できます(HTMLの_<head>
_セクションにあることが望ましい)。
次に、@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 をご覧ください。
index.blade.phpの下部にあるpizza.jsを移動してみてください
@section('extra-script')
{{Html::script('js/components/pizza.js')}}
@endsection
それが役に立てば幸い。