@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
浏览:170

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]删除
最新教程 更多>
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-14
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-07-14
  • Go语言如何动态发现导出包类型?
    Go语言如何动态发现导出包类型?
    与反射软件包中的有限类型的发现能力相反,本文探讨了在运行时发现所有包装类型(尤其是struntime go import( “ FMT” “去/进口商” ) func main(){ pkg,err:= incorter.default()。导入(“ time”) ...
    编程 发布于2025-07-14
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-14
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-07-14
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-07-14
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-07-14
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-07-14
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-14
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-07-14
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-07-14
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-14
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-07-14
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-07-14
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-07-14

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

Copyright© 2022 湘ICP备2022001581号-3