Загружать определенные js для определенных страниц в laravel

Я использую laravel 4 для проекта. Есть ли способ указать, какие файлы js я хочу загрузить для определенного вида. Прямо сейчас я собираю все в одном файле.

Когда я использую codeigniter, для загрузки определенных js файлов, я использую библиотеку для генерации тегов script и эхо их в нижнем колонтитуле. что-то ниже

$this->data['js'] = $this->js_lib->generate('jquery');

Тогда, на мой взгляд,

<?= $js ?>

Любая идея, как это сделать в laravel?

Ответ 1

Основной макет

main.blade.php

@include('includes.header')

<body>
    <!-- main content -->
    <div id="main_wrapper">
        <div class="page_content">
             @yield('content')
        </div>      
    </div>

@include('includes.footer')

</body>


header.blade.php

<head>
<meta charset="UTF-8">
<title>My Page</title>
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no">

<!-- common styles -->
<link rel="stylesheet" href="{{ asset('assets/bootstrap.css') }}">      
<!-- page specific styles -->
    @yield('pagespecificstyles')
</head>

footer.blade.php

<footer>
<!-- common scripts -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>

<!-- page specific scripts -->
@yield('pagespecificscripts')

mypage.blade.php

@extends('layouts.main')

@section('pagespecificstyles')

    <!-- flot charts css-->
    <link rel="stylesheet" href="{{ asset('assets/lib/owl-carousel/flot.css') }}">

@stop

@section('content')
<div class="container">
        Hello welcome to my page.
</div>
@endsection

@section('pagespecificscripts')
    <!-- flot charts scripts-->
    <script src="{{ asset('/assets/lib/flot/jquery.flot.min.js') }}"></script>
@stop

Ответ 2

Я знаю давно, но на благо других, которые могут споткнуться здесь! Один вариант также находится в вашем макете для определения дополнительных разделов, например.

@yield('css') <!-- In the head -->

@yield('js') <!-- Before the </body> tag -->

Затем в ваших представлениях

@extends('some.layout')

@section('css')
    @include('js/dependencies/some/js/dependency/css.css')
@append

<!-- So in case these dependencies are used elsewhere you're not repeating your script or link tags over and over -->

@section('js')
    @include('js/dependencies/some/js/dependency/js.js') 
    @include('js/dependencies/some/js/dependency/js2.js')
@append

@section('content')

    Your actual content

@endsection

Ответ 3

Стеки

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

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

Вы можете вставлять в стек столько раз, сколько необходимо. Чтобы отобразить полное содержимое стека, передайте имя стека в директиву @stack:

<head>
    <!-- Head Contents -->

    @stack('scripts')
</head>

https://laravel.com/docs/5.7/blade#stacks

Ответ 4

Просто создайте папку "partials" view и включите все script, которые вы хотите в каждом представлении.

Итак, на ваш взгляд;

<body>
    // Your main content here
    // Other JS files you want in all views

    @include('partials.analytics.blade.php')

    @include('partials.googlemaps')

    @include('partials.some_other_js_file')

</body>

Затем у вас /views/partials/analytics.blade.php

<script>
  // Your JS analytics script here
</script>

и просто повторите для каждого script '

Ответ 5

Вы можете добавить следующий код в ваш файл app.blade

@stack('scripts')

и тогда вы можете использовать JQuery на странице

@push('scripts')
<script type="text/javascript">
 ///Js code
</script>
@endpush