首页 > 解决方案 > Laravel 6 @yield() 在 include() 方法中不起作用

问题描述

为什么@yield('script')不起作用?

我在 PHP laravel Blade master.blade.php文件中创建一个布局,如下所示

@include('layouts.header')
@include('layouts.sidebar')
<div class="main-panel">
    <!-- Navbar -->
@include('layouts.navbar')
<!-- End Navbar -->
    <div class="content">
        <div class="container-fluid">
            @yield('content')
        </div>
    </div>
</div>
</div>
@include('layouts.footer')

我通过使用 @section('script') layouts.footer文件添加@yield('script')layouts.footer编写脚本代码

....
<script src="{{ asset('./assets/js/core/jquery.min.js') }}"></script>
@yield('script')
...
  </body>
</html>

当我section('script')在刀片页面中使用它时它不起作用
@yield('script')像这样使用

@extends('layouts.master')

@section('content')
   <div>
      <button class="btn btn-sm btn-outline-primary" id="modal">
              Sponsored
      </button>
   </div>
@endsection

// JQuery code 
@section('script')
    <script>
        $(document).on("click", "#modal", function () {
            alert('hello world');
        });
    </script>
    @endsection

标签: jquerylaravellayoutlaravel-blade

解决方案


Blade 允许您推送到命名堆栈,这些堆栈可以在另一个视图或布局中的其他位置呈现。这对于指定子视图所需的任何 JavaScript 库特别有用:

include这是scriptsand的错误方法links

你可以使用@stack它。更多关于堆栈

layouts.footer文件

<script src="{{ asset('./assets/js/core/jquery.min.js') }}"></script>
@stack('script')

刀片文件

@push('script')
    <script>
        $(document).on("click", "#modal", function () {
            alert('hello world');
        });
    </script>
@endpush

推荐阅读