Почему я не могу поместить теги <script>в свой раздел @section? - PullRequest
1 голос
/ 29 апреля 2020

У меня есть @section('content') в файле home.blade.php, который расширяет @extends('layouts.app'), для простоты я буду использовать сгенерированные леса Laravel в качестве примера.

home.blade.php:

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif
                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Я пытаюсь добавить тег скрипта в раздел:

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif
                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
<script src="js/example.js"></script> <!-- Adding my script here -->
@endsection

Но затем я получаю следующую ошибку в консоли:

app.js:38355 [Vue warn]: Error compiling template:

Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.

Она говорит, что не размещайте теги скрипта в шаблонах? Что именно это означает? Как я могу поместить скрипт в @section, я не хочу помещать скрипт в мой @extends('layouts.app'), я только хочу, чтобы мой скрипт работал для этой @section области.

1 Ответ

2 голосов
/ 29 апреля 2020

Вы можете использовать стеки Blade, они позволяют указать JavaScript для дочерних представлений. В вашем home.blade.php добавьте следующее:

@push('scripts')
<script src="js/example.js"></script>
@endpush

Это поместит ваш sh ваш скрипт в стек с именем scripts, вы можете присвоить вашему стеку любое имя. Затем в вашем app.blade.php вызовите стек внутри вашего тега <head> следующим образом:

 @stack('scripts')

Теперь ваш файл example.js будет загружаться только для home.blade.php. Любые другие представления, расширяющие app.blade.php, не будут загружать этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...