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

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]删除
最新教程 更多>
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-19
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-19
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-19
  • 我可以开车吗?编写酒精测试仪的代码
    我可以开车吗?编写酒精测试仪的代码
    在我居住的丹麦,不幸的是,我们在欧洲保持着一项记录:我们的孩子是欧洲大陆饮酒最多的人。正因为如此,人们非常关注减少青少年饮酒并教育孩子们了解酒精的影响。 我为当地学校编写了一个 HTML 和 JavaScript 酒精计算器,向学生展示酒精如何影响身体以及如何计算血液酒精含量 (BAC)。 ...
    编程 发布于2024-11-18
  • 为什么我的 Python MySQL 插入功能不起作用?
    为什么我的 Python MySQL 插入功能不起作用?
    Python MySQL 插入不起作用在 Python 中,利用 MySQL API 连接到 MySQL 数据库是一种流行的方法。但是,尝试将记录插入数据库时​​可能会出现困难。遇到的一个此类问题是无法插入记录。经检查,插入操作涉及的代码如下:db = MySQLdb.connect("l...
    编程 发布于2024-11-18
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-18
  • 修复“无法在模块外部使用导入语句”错误
    修复“无法在模块外部使用导入语句”错误
    作为 JavaScript 和 TypeScript 开发人员,我们在使用不同的模块系统时经常会遇到意外的错误。一个常见问题是“无法在模块外部使用 import 语句”错误。它通常在使用现代 ES 模块 (ESM) 或处理涉及 Webpack、Babel 或 Node.js 环境等捆绑程序的设置时出...
    编程 发布于2024-11-18
  • 如何从本地主机连接到 Docker MySQL 容器?
    如何从本地主机连接到 Docker MySQL 容器?
    从本地主机连接到 Docker MySQL 容器要直接从主机与 Docker 容器中运行的 MySQL 实例进行交互,请按照以下步骤操作步骤:使用 docker-compose up由于您已经在 Docker 主机上发布了端口 3306,因此您可以从主机本身连接到它:$> mysql -h 1...
    编程 发布于2024-11-18
  • 如何在具有不同模板参数的模板类中定义好友关系?
    如何在具有不同模板参数的模板类中定义好友关系?
    深入研究类模板与Template Class Friends定义二叉树类(BT)及其元素类(BE)时, BT 访问BE 私人会员需要建立好友关系。然而,理解正确定义关系的底层机制至关重要。最初,您尝试将好友关系声明为 templatefriend class BT。但这种语法与 BE 的模板参数存在...
    编程 发布于2024-11-18
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-18
  • ## 构建强大的 CMS 后端:OOP 和 MVC 结构如何增强项目管理?
    ## 构建强大的 CMS 后端:OOP 和 MVC 结构如何增强项目管理?
    PHP OOP 核心框架:为 CMS 后端实现坚实的基础了解面向对象编程 (OOP) 在开发时至关重要可靠的 CMS 后端框架。结构良好的框架应遵循 OOP 原则并采用 MVC 设计来提高效率。管理单个项目页面上的多个部分处理一个项目上的多个部分时项目页面,考虑使用不同的方法来管理每个部分。例如,索...
    编程 发布于2024-11-18
  • std::string 是如何实现的以及它与 C 风格字符串有何不同?
    std::string 是如何实现的以及它与 C 风格字符串有何不同?
    对 std::string 实现的探索神秘的 std::string,C 标准库的基本组件,引发了人们的关注对它的内部运作方式感到好奇。在本文中,我们深入研究其实现,揭示其复杂性,并将其与其前身、无处不在的 C 风格字符串区分开来。各种编译器工具链提供对各自 std 源代码的访问: :string ...
    编程 发布于2024-11-18
  • 为什么 JavaScript 中 (0 < 5 < 3) 的计算结果为 true?
    为什么 JavaScript 中 (0 < 5 < 3) 的计算结果为 true?
    JavaScript 的比较难题:破译 (0 < 5 < 3) 中的真相在 JavaScript 领域,出现了一个奇特的观察结果:为什么表达式 (0 < 5 < 3) 的计算结果为 true?这种神秘的行为源于语言的求值规则,称为操作顺序。要解开这个谜团,我们必须深入研究表达式执行的操作顺序:Par...
    编程 发布于2024-11-18
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-11-18
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-18

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

Copyright© 2022 湘ICP备2022001581号-3