在laravel中为某些页面加载特定的js

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在laravel中为某些页面加载特定的js相关的知识,希望对你有一定的参考价值。

我正在使用laravel 4进行项目。有什么办法可以指定我想为某个视图加载的js文件。现在我把所有文件都集中在一起。

当我使用codeigniter,加载特定的js文件时,我使用库来生成脚本标记并在页脚处回显它们。如下的东西

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

然后在我看来

<?= $js ?>

知道如何在laravel中做到这一点?

答案

主要布局

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
另一答案

我知道不久前问过,但为了其他可能在这里跌倒的人的利益!您的布局中还有一个选项可用于定义其他部分,例如:

@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
另一答案

堆栈

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

另一答案

只需要一个'partials'视图文件夹 - 并在每个视图中包含您想要的任何脚本。

所以在你看来;

<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>

并重复每个'脚本'

以上是关于在laravel中为某些页面加载特定的js的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中为每个页面上的布局填充数据

关于js----------------分享前端开发常用代码片段

angularJS使用ocLazyLoad实现js延迟加载

Laravel Eager Loading - 仅加载特定列

Laravel 使用 QueryBuilder 时如何避免页面重新加载

Laravel 5.5登录后重定向到特定路由