@endpush @push(\\'scripts\\') @endpush

在这种情况下,script1.js 将在 script2.js 之前加载,因为 @push 按照声明的顺序将内容添加到堆栈中。

  1. 在 Partials 和组件中使用 @push:@push 也可以在 Blade 部分(例如 @include)或 Blade 组件中使用。这对于将特定于视图的脚本或样式直接包含在可重用组件中非常有用,从而可以轻松管理依赖项。
      
@push(\\'scripts\\') @vite(\\'resources/js/partial-specific.js\\') @endpush

当此部分包含在视图中时,partial-specific.js 将被添加到布局文件中的脚本堆栈中。

  1. 使用@prepend控制顺序:如果特定脚本需要在同一堆栈中的其他脚本之前加载,则可以使用@prepend而不是@push。 @prepend 将内容放置在堆栈的开头,从而可以更好地控制加载顺序。
   @prepend(\\'scripts\\')          @endprepend   @push(\\'scripts\\')          @endpush

这里,ritical.js 将在 non_ritic.js 之前加载,无论它们在 Blade 文件中的位置如何。

要点


4.替代方案:在布局中使用内联条件语句

如果您需要更好地控制何时包含 JavaScript,Laravel 的条件语句允许直接在布局中使用基于路由或变量的逻辑。

根据路线有条件地包含

您可以直接在布局中使用路由检查来包含基于当前路由的 JavaScript:

@if (request()->routeIs(\\'some.route.name\\'))    @vite(\\'resources/js/custom.js\\')@endif

基于变量有条件包含

要根据变量有条件地加载脚本,您可以在控制器或子视图中设置一个标志,然后在布局中检查它:

  1. 在你的控制器中
   return view(\\'your.view\\', [\\'loadCustomJS\\' => true]);
  1. 在布局中
   @if (!empty($loadCustomJS))       @vite(\\'resources/js/custom.js\\')   @endif

这种方法允许您根据特定变量或路由控制 JavaScript 加载,为自定义页面设置提供灵活性。


概括

以下是所讨论方法的快速概述:

这些选项允许您精确控制 JavaScript 加载,使您的 Laravel 11 项目高效且可维护。

","image":"http://www.luping.net/uploads/20241111/17313105816731b3f508523.jpg","datePublished":"2024-11-11T16:46:05+08:00","dateModified":"2024-11-11T16:46:05+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 Laravel 中包含 JavaScript 适用于所有场景的分步指南

如何在 Laravel 中包含 JavaScript 适用于所有场景的分步指南

发布于2024-11-11
浏览:246

How to Include JavaScript in Laravel  A Step-by-Step Guide for All Scenarios

如何在 Laravel 11 中包含 JavaScript:适用于所有场景的分步指南

在 Laravel 11 中,由于默认的资源捆绑器 Vite,向项目添加 JavaScript 变得轻而易举。以下是如何为各种场景设置 JavaScript,从全局包含到特定视图中的条件加载。


1. 在所有文件中包含 JavaScript

在许多情况下,您可能希望在 Laravel 应用程序中全局包含 JavaScript。以下是如何组织和捆绑 JavaScript 以实现普遍包容。

第 1 步:放置 JavaScript 文件

  1. 位置:将JavaScript文件存放在resources/js目录中。例如,如果您的文件名为 custom.js,请将其另存为 resources/js/custom.js.
  2. 组织:对于包含多个JavaScript文件的复杂项目,可以将它们组织在resources/js的子目录中,例如resources/js/modules/custom.js。

第2步:使用Vite编译JavaScript

Laravel 11 使用 Vite 来管理资产。要将其配置为捆绑您的 JavaScript:

  1. 包含在app.js中:打开resources/js/app.js并导入您的自定义文件:
   import './custom.js';
  1. 在视图中直接导入:或者,如果您只想在某些视图中使用 JavaScript,您可以在 Blade 模板中使用 @vite 指令:
   @vite('resources/js/custom.js')

第三步:配置vite.config.js

确保 vite.config.js 设置为正确处理 @vite 导入。默认情况下,它应该看起来像这样:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/js/app.js'],
            refresh: true,
        }),
    ],
});

第四步:运行Vite

使用Vite编译您的资产:

  • 对于开发:运行 npm run dev
  • 对于生产:运行 npm run build

第 5 步:在 Blade 模板中加载 JavaScript

要在模板中包含 JavaScript 文件,请使用 @vite 指令:



    My Laravel App
    @vite('resources/js/app.js')


    


概括

  • JavaScript 文件存储在resources/js 中。
  • 在 app.js 中导入以进行全局包含,或根据需要直接包含在 Blade 模板中。
  • 使用Vite编译资产。
  • 在Blade模板中使用@vite加载JavaScript。

通过此设置,JavaScript 将在 Laravel 11 项目中在整个站点范围内可用。


2. 了解刀片渲染顺序

当有条件地在特定视图中包含 JavaScript 时,了解 Blade 模板的渲染顺序至关重要。

在 Laravel 中,首先处理布局,然后是单个视图和局部视图。渲染过程如下:

  1. 首先渲染布局,并为内容注入创建占位符(@yield 和 @section)。
  2. 接下来处理子视图或部分视图,并将其内容插入到布局占位符中。

由于这个顺序,如果您想根据子视图内容有条件地在布局中添加 JavaScript 文件,标准变量检查将不起作用。您需要使用 Blade 的 @stack@push 指令来更灵活地处理特定于页面的 JavaScript。


3. 使用 Stack 和 Push 有条件地将 JavaScript 包含在特定视图中

为了将 JavaScript 添加到特定视图,Laravel 的 @stack 和 @push 指令提供了一个有效的解决方案,允许您有条件地在布局中包含脚本。

第 1 步:在布局中定义堆栈

在布局中,为特定于页面的脚本创建堆栈:



    My Laravel App
    @vite('resources/js/app.js')
    @stack('scripts') 


    @yield('content')


第 2 步:从子视图推送脚本

在需要JavaScript的特定Blade文件中,推送到脚本堆栈:

@extends('layout')

@section('content')
    
@endsection

@push('scripts')
    @vite('resources/js/custom.js')
@endpush

通过此设置,仅在加载特定视图时才会包含 custom.js。此方法提供了一个与 Laravel 的渲染顺序配合使用的干净解决方案,确保根据需要有条件地包含 JavaScript 文件。


在哪里声明@push?

@push 语句在 Blade 视图中的放置主要关系到可读性和执行顺序。以下是如何有效使用@push:

  1. 视图中的放置:虽然您可以将 @push 放置在 Blade 视图中的任何位置,但最佳实践是将其放置在文件末尾,通常位于 @section 内容之后。这使得脚本相关的代码与主要内容分开,提高了可读性和可维护性。
   @extends('layout')

   @section('content')
       
   @endsection

   @push('scripts')
       @vite('resources/js/custom.js')
   @endpush
  1. 多个@push语句的顺序:如果同一个堆栈有多个@push声明(例如@push('scripts')),它们将按照它们在视图中出现的顺序附加。例如:
   @push('scripts')
       
   @endpush

   @push('scripts')
       
   @endpush

在这种情况下,script1.js 将在 script2.js 之前加载,因为 @push 按照声明的顺序将内容添加到堆栈中。

  1. 在 Partials 和组件中使用 @push:@push 也可以在 Blade 部分(例如 @include)或 Blade 组件中使用。这对于将特定于视图的脚本或样式直接包含在可重用组件中非常有用,从而可以轻松管理依赖项。
   
   
@push('scripts') @vite('resources/js/partial-specific.js') @endpush

当此部分包含在视图中时,partial-specific.js 将被添加到布局文件中的脚本堆栈中。

  1. 使用@prepend控制顺序:如果特定脚本需要在同一堆栈中的其他脚本之前加载,则可以使用@prepend而不是@push。 @prepend 将内容放置在堆栈的开头,从而可以更好地控制加载顺序。
   @prepend('scripts')
       
   @endprepend

   @push('scripts')
       
   @endpush

这里,ritical.js 将在 non_ritic.js 之前加载,无论它们在 Blade 文件中的位置如何。

要点

  • 将 @push 放在视图的末尾以提高清晰度和可维护性。
  • 顺序由视图中的位置决定,较早的@push语句首先加载。
  • @push 在部分和组件中工作,可以轻松包含特定于视图的依赖项。
  • 对于需要在同一堆栈中首先加载的脚本使用@prepend。

4.替代方案:在布局中使用内联条件语句

如果您需要更好地控制何时包含 JavaScript,Laravel 的条件语句允许直接在布局中使用基于路由或变量的逻辑。

根据路线有条件地包含

您可以直接在布局中使用路由检查来包含基于当前路由的 JavaScript:

@if (request()->routeIs('some.route.name'))
    @vite('resources/js/custom.js')
@endif

基于变量有条件包含

要根据变量有条件地加载脚本,您可以在控制器或子视图中设置一个标志,然后在布局中检查它:

  1. 在你的控制器中
   return view('your.view', ['loadCustomJS' => true]);
  1. 在布局中
   @if (!empty($loadCustomJS))
       @vite('resources/js/custom.js')
   @endif

这种方法允许您根据特定变量或路由控制 JavaScript 加载,为自定义页面设置提供灵活性。


概括

以下是所讨论方法的快速概述:

  • 全局包含:将 JavaScript 放入 app.js 中并使用 @vite 将其全局包含。
  • Stack 和 Push 的条件包含:使用 @stack 和 @push 指令进行灵活、模块化的脚本处理,确保脚本仅加载到需要的视图中。
  • 布局中的条件语句:使用基于路由的检查或控制器变量有条件地直接在布局中加载JavaScript。

这些选项允许您精确控制 JavaScript 加载,使您的 Laravel 11 项目高效且可维护。

版本声明 本文转载于:https://dev.to/websilvercraft/how-to-include-js-files-in-laravel-templates-49e6?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-04-06
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-06
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题: 考虑一个布局,其中我们具有可滚动的映射div,该图像div与用户的垂直滚动一起移动,同时维持固定的固定sidebar。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 映射{} 因此。我们不使用jQuery的“ .aim...
    编程 发布于2025-04-06
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, attributeError:SomeClass实...
    编程 发布于2025-04-06
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-04-06
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-04-06
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-06
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-06
  • 如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    在java 通过Java通过Java运行命令命令可能很具有挑战性。尽管您可能会找到打开命令提示符的代码段,但他们通常缺乏更改目录并执行其他命令的能力。 solution:使用Java使用Java,使用processBuilder。这种方法允许您:启动一个过程,然后将其标准错误重定向到其标准输出。...
    编程 发布于2025-04-06
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-04-06
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,以便更快地搜索这些前缀。理解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-04-06
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-04-06
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-06
  • 如何配置Pytesseract以使用数字输出的单位数字识别?
    如何配置Pytesseract以使用数字输出的单位数字识别?
    Pytesseract OCR具有单位数字识别和仅数字约束 在pytesseract的上下文中,在配置tesseract以识别单位数字和限制单个数字和限制输出对数字可能会提出质疑。 To address this issue, we delve into the specifics of Te...
    编程 发布于2025-04-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3