在子模板中加载JS时,Laravel 5 @section无法正常工作

时间:2015-12-21 19:59:24

标签: laravel-5.1

我的基本布局包含以下内容:

@section('javascripts')
    <script src="<?php echo asset('js/all.js') ?>"></script>
@endsection

在我的孩子模板中,我有以下内容:

@extends('layouts.master')

<!-- some other html code -->
@section('javascripts')
    @parent
    <!-- some local scripts -->
    <script>
        $(function() { console.log('test'); });
    </script>
@endsection

父母和孩子的javascripts根本没有加载。

然而,以下作品: 基础布局:

<!-- load main scripts -->
<script src="<?php echo asset('js/all.js') ?>"></script>
@yield('javascripts')

儿童模板:

@extends('layouts.master')

<!-- some other html code -->
@section('javascripts')
    <!-- some local scripts -->
    <script>
        $(function() { console.log('test'); });
    </script>
@endsection

2 个答案:

答案 0 :(得分:0)

我认为你可以更好地使用@stack和@push结构。这看起来像这样

在您的父模板中,您可以添加@stack标记,以便在此处查看您的javascript代码

<head>
    <title>My website</title>
    @stack('scripts')
</head>

然后在您的子模板中,您将使用@push标记,它将如下所示。

@push('scripts')
<script>
     $(function() { console.log('test'); });
</script>
@endpush

这会将您的javascript从子模板推送到父模板的堆栈中。

我在laracasts上找到了一个解释它的主题。 https://laracasts.com/discuss/channels/general-discussion/blade-push-and-stack-are-they-here-to-stay

答案 1 :(得分:0)

您可以使用stacks,但对于您的问题,您没有正确关闭section。而不是@endsection,您必须在基本布局中使用@show

@section('javascripts')
    <script src="<?php echo asset('js/all.js') ?>"></script>
@show