Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
EJS 模板中单脚本标签渲染多个变量的技巧与实践_创想鸟

EJS 模板中单脚本标签渲染多个变量的技巧与实践

EJS 模板中单脚本标签渲染多个变量的技巧与实践

本文探讨了在ejs模板中,如何优雅地在单个脚本标签内渲染多个javascript变量。针对常见的逗号分隔符无法实现预期效果的问题,文章提供了使用javascript模板字面量(template literals)的解决方案,并详细解释了其工作原理及应用场景,旨在提升模板代码的简洁性和可读性。

EJS模板中多变量渲染的挑战

在使用EJS(Embedded JavaScript)作为Node.js应用的视图引擎时,开发者经常需要将后端传递的多个数据变量渲染到HTML页面中。EJS的核心在于其脚本标签,其中用于将JavaScript表达式的结果输出到HTML。

一个常见的需求是在同一行或同一HTML元素内显示多个变量,例如,后端传递了currentDay和typeOfDay两个变量:

res.render('index', {    currentDay: "Monday",    typeOfDay: "Weekday"});

期望在模板中显示为 “Today is Monday. It’s a Weekday”。

初学者可能会尝试将多个变量用逗号分隔,置于一个标签内,例如:

Today is

然而,这种做法通常无法达到预期效果。在JavaScript中,逗号运算符会依次执行每个表达式,并返回最后一个表达式的值。因此,currentDay, typeOfDay这个表达式的最终结果是typeOfDay的值。EJS的标签只会输出这个最终的表达式结果,而非将所有变量拼接起来。根据实际观察,在上述尝试中,有时甚至只渲染第一个变量,或结果不符合预期,导致输出不完整或错误。

标准的多脚本标签渲染方式

为了正确显示所有变量,一种直接且有效的方法是使用多个脚本标签,每个标签负责渲染一个变量。这是EJS模板中最常见和推荐的做法之一:

Today is . It's a

这种方式清晰明了,每个变量都有其独立的输出上下文,确保了所有数据的正确渲染。它易于理解和维护,对于大多数简单的变量拼接场景而言是完全足够的。

优雅的解决方案:JavaScript模板字面量

虽然多个脚本标签能够解决问题,但在某些情况下,尤其当需要拼接的字符串较长或变量较多时,使用多个标签可能会显得冗长,并可能降低模板的可读性。此时,JavaScript的模板字面量(Template Literals,使用反引号 ` 定义)提供了一个更为优雅和简洁的解决方案。

模板字面量允许在字符串中嵌入表达式(通过${expression}语法),并将它们解析为字符串的一部分。这意味着我们可以在一个模板字面量中构建一个完整的字符串,然后将这个字符串作为单个表达式传递给EJS的标签。

以下是使用模板字面量解决多变量渲染问题的示例:

Today is

工作原理:在这个例子中,`${currentDay}. It’s a ${typeOfDay} 是一个完整的JavaScript模板字面量字符串。当EJS引擎解析到时,它会执行括号内的JavaScript代码。JavaScript引擎会首先解析模板字面量,将currentDay和typeOfDay的值嵌入到字符串中,生成一个单一的字符串(例如:”Monday. It’s a Weekday”)。随后,EJS会将这个生成的字符串作为`表达式的最终结果输出到HTML中。

优势:

简洁性: 减少了重复的EJS标签,使模板代码更加紧凑。可读性: 字符串的结构一目了然,便于理解最终的输出格式。灵活性: 可以在模板字面量中包含任意复杂的JavaScript表达式,例如函数调用或简单的运算。

完整示例与注意事项

结合后端数据传递和前端模板渲染,一个完整的示例如下:

Node.js后端代码 (app.js 或 routes/index.js):

const express = require('express');const app = express();const port = 3000;// 设置EJS为视图引擎app.set('view engine', 'ejs');// 设置视图文件目录app.set('views', './views'); // 定义一个路由来渲染页面app.get('/', (req, res) => {    const currentDay = "Wednesday";    const typeOfDay = "Midweek";    // 将数据传递给EJS模板    res.render('index', {        currentDay: currentDay,        typeOfDay: typeOfDay    });});// 启动服务器app.listen(port, () => {    console.log(`Server running at http://localhost:${port}`);});

EJS模板文件 (views/index.ejs):

            EJS Multiple Variables        

Today is

The current day is and it is a .

注意事项:

表达式的复杂性: 尽管模板字面量非常强大,但在其中嵌入过于复杂的逻辑可能会降低模板的可读性。对于复杂的计算或条件判断,建议在后端控制器中预处理数据,或在EJS中使用 脚本标签执行逻辑,以保持模板的“瘦”和“纯粹”。HTML转义: 标签会自动对输出内容进行HTML转义,以防止跨站脚本(XSS)攻击。如果需要输出原始的HTML内容(例如,后端传递的富文本),应使用 标签,但请务必确保内容是安全的,因为它会直接渲染HTML而不进行转义。模板字面量本身不会改变或的转义行为。

总结

在EJS模板中,当需要在单个脚本标签内渲染多个变量并进行字符串拼接时,JavaScript模板字面量(“)是比简单的逗号分隔符更优、更可靠的解决方案。它通过将多个变量嵌入到一个统一的字符串表达式中,使得EJS能够一次性输出所需的完整内容,从而提升了代码的简洁性和可读性。理解标签的工作原理以及JavaScript表达式的求值规则,是高效利用EJS模板的关键。

以上就是EJS 模板中单脚本标签渲染多个变量的技巧与实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1583764.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CSS Grid布局中不完整行的居中技巧
上一篇 2025年12月23日 00:17:56
使用 jQuery 实现 HTML 表格动态筛选功能教程
下一篇 2025年12月23日 00:18:14

相关推荐

  • phpMyAdmin快速导出文件字符集配置指南

    本文详细介绍了phpMyAdmin快速导出功能中文件字符集的默认设置及其配置方法。默认情况下,快速导出生成的文件采用UTF-8编码。用户可以通过修改phpMyAdmin的配置文件config.inc.php,利用$cfg[‘Export’][‘charset&#8…

    2026年9月24日
    100
  • JavaScript 中替换 JSON 数据值的实用指南

    本文旨在提供一个清晰、简洁的 JavaScript 教程,讲解如何根据特定条件,利用响应数据中的值替换 JSON 数据中的指定字段。我们将通过实例代码演示如何处理包含 “All” 值的 Emp_Id 字段,并使用响应数据中的 ID 值进行替换,最终生成期望的 JSON 数据结…

    2026年9月24日
    200
  • 基于属性配置动态创建 Spring Boot Bean

    本文介绍了如何在 Spring Boot 应用中基于配置属性的值动态创建 Bean。通过使用 @ConditionalOnProperty 注解,可以根据指定的属性是否存在以及其值来决定是否创建某个 Bean,从而实现灵活的配置和 Bean 的动态加载。本文将提供详细的代码示例和使用说明,帮助开发者…

    2026年9月24日
    100
  • Laravel Blade中条件隐藏元素的优雅实践

    本文探讨了在Laravel Blade模板中如何高效地实现HTML元素的条件隐藏。针对传统@if-@else语句导致代码冗余的问题,教程提出使用Blade的内联三元运算符在style属性中动态控制display: none,从而避免重复代码,提升模板的可读性和维护性。此外,还将介绍如何利用CSS类和…

    2026年9月24日
    100
  • 将 double 类型窄化为 float 类型时出现不兼容的返回类型

    本文旨在解决在 Java 中将父类的 double 类型返回值在子类中覆盖为 float 类型时遇到的类型不兼容问题。我们将深入探讨问题的原因,并提供使用泛型来解决此问题的有效方法,帮助开发者避免类似错误,并编写更健壮和灵活的代码。 问题分析:返回类型不兼容的原因 在面向对象编程中,子类可以覆盖(O…

    2026年9月24日
    500
  • 三大运营商 eSIM 手机业务全面落地 办理渠道各有侧重

    10 月 14 日消息,日前,中国联通与中国移动正式获准开展 esim 手机运营服务的商用试验,中国电信也同步取得工信部颁发的 esim 手机商用试验许可,这意味着国内三大运营商在 esim 手机业务方面已全面进入实际应用阶段。 中国移动用户可选择前往线下营业厅办理 eSIM 相关业务,也可通过中国…

    2026年9月23日
    200
  • mysql中如何排查磁盘空间不足问题

    先检查磁盘使用情况,使用df -h和du -sh定位大文件;再通过SQL查询分析数据库和表的空间占用;接着检查binlog、慢查询日志及临时文件;最后采取删除无用数据、归档、压缩、分区等措施释放空间并优化配置。 当MySQL出现磁盘空间不足时,可能会导致写入失败、服务中断甚至实例崩溃。排查这类问题需…

    2026年9月23日
    100
  • laravel API资源类怎么格式化JSON输出_laravel API资源类JSON格式化教程

    使用 Laravel API 资源类可统一 JSON 返回格式,通过 make:resource 创建资源类,在 toArray 中定义字段,控制器中返回 new UserResource($user) 或 UserResource::collection() 实现数据结构化输出。 如果您在使用 L…

    2026年9月23日
    400
  • VSCode主题开发:创建动态色彩主题的进阶技术解析

    动态主题需通过外部插件监听系统事件实现,核心是利用vscode.themeColor API响应主题切换,结合语义化作用域与Semantic Highlighting精准控制配色逻辑,实现智能自适应视觉体验。 想让VSCode主题随环境自动切换色彩?动态主题不只是换个配色那么简单。核心在于理解VSC…

    2026年9月23日
    400
  • PHP同页面无限次表单提交与显示:防止数据覆盖的实现技巧

    本教程详细阐述了如何在php中实现同页面多次表单提交而不覆盖先前数据的方法。核心策略是利用html的数组命名输入(`name=”field[]”`)来收集多个值,并在每次页面刷新时,通过隐藏输入字段重新提交已有的数据,从而在不依赖数据库的情况下,实现“无限”次提交并显示所有历…

    2026年9月23日
    100
  • VS Code自动化测试:持续集成与测试覆盖率

    VS Code通过插件和工具集成支持自动化测试、CI流程与覆盖率分析。①配置Jest或pytest等框架,结合Test Explorer UI插件实现测试运行与调试;②利用GitHub Actions等CI服务,在代码推送后自动执行测试,通过插件在编辑器内查看状态;③启用Coverage Gutte…

    2026年9月23日
    100
  • 悟空浏览器如何使用全局媒体控制器_悟空浏览器多媒体播放控制中心使用技巧

    1、确保悟空浏览器通知权限开启,以激活系统媒体控制;2、检查网站是否配置Media Session API,必要时注入脚本补充元数据与控制函数;3、结合画中画与后台播放功能,维持媒体会话活跃,实现锁屏或切换应用时的持续控制。 如果您在使用悟空浏览器播放网页媒体时,希望利用系统级的媒体控制功能来管理播…

    2026年9月23日
    100
  • RapidMiner的AI混合工具如何操作?快速实现数据挖掘的实用方法

    RapidMiner通过可视化流程整合数据导入、清洗、特征工程、模型训练与部署,支持文本挖掘、时间序列分析及模型优化,可扩展自定义代码实现AI混合分析。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ RapidMiner的AI混合工具,简单…

    2026年9月23日
    500
  • OOP设计原则SOLID在Java开发中的应用

    SOLID原则提升Java代码可维护性与扩展性:1. 单一职责确保类只负责一项功能;2. 开闭原则支持扩展而非修改;3. 里氏替换保证子类可替代父类;4. 接口隔离避免实现无用方法;5. 依赖倒置使高层依赖抽象而非具体实现,结合设计模式更佳。 SOLID 是面向对象编程(OOP)中五个核心设计原则的…

    2026年9月23日
    400
  • 为什么硬盘数据恢复不完整?如何提高数据完整性?

    硬盘数据恢复不完整主要因数据覆盖、物理损伤、文件系统损坏、加密问题及恢复软件局限所致;一旦发生数据丢失且伴随异响、无法识别等情况,应立即停止操作并寻求专业服务,因其具备无尘环境、专用设备与技术经验,可最大限度避免二次损伤并提升恢复成功率。 硬盘数据恢复不完整,这事儿说起来挺让人沮丧的,往往是数据在丢…

    2026年9月23日
    700
  • 使用 Python 查找满足按位和条件的数组唯一组合

    本文详细介绍了如何使用 Python 及其 itertools 模块,高效地查找一组数组(选项)的唯一组合,使其元素按位累加后,每个位置的值都大于或等于一个目标数组的对应值。文章通过一个实际案例,展示了基于组合迭代的编程实现,并讨论了潜在的优化策略。 问题阐述 在许多数据处理和决策场景中,我们可能需…

    2026年9月23日
    100
  • win11耳机插上没反应怎么办_win11耳机无声音故障排查与修复

    首先检查耳机物理连接并测试设备是否正常,确认Windows默认播放设备设置正确,更新或重装音频驱动程序,确保Windows Audio及相关服务已启动,运行系统音频疑难解答工具,并检查Realtek音频管理器中的插孔检测设置。 如果您在Windows 11系统中插入耳机后没有声音或设备无反应,可能是…

    2026年9月23日
    900
  • Java类间ArrayList访问:解决“无法解析方法”的包冲突问题

    本文旨在解决Java开发中,一个类(如Bill)无法访问另一个类(如自定义Menu)中ArrayList的常见问题。核心原因通常是包冲突,即系统默认导入的同名类(如java.awt.Menu)覆盖了自定义类。解决方案包括为自定义类声明明确的包,并在使用时进行显式导入,或确保两者位于同一默认包中,从而…

    2026年9月23日
    100
  • 使用 Dompdf 一键生成大量 PDF 文件的优化方案

    本文旨在解决使用 Dompdf 生成大量 PDF 文件时遇到的超时问题。通过分析常见原因,提出了从Web服务器环境迁移到命令行环境,并配合 set_time_limit(0) 函数来避免执行超时,从而高效生成多个包含大量数据的 PDF 文件。 问题分析 从提供的代码片段可以看出,程序通过循环遍历 $…

    2026年9月23日
    600
  • 使用 Mp4Parser Java API 创建可播放 MP4 文件的教程

    本文档旨在指导开发者使用 Mp4Parser Java API 创建可播放的 MP4 文件。通过一个简单的复制 MP4 文件结构的例子,深入理解 Mp4Parser 的核心概念和使用方法,帮助开发者避免常见错误,并为更复杂的 MP4 文件操作打下基础。本文将重点讲解如何正确复制 MP4 文件的关键 …

    2026年9月23日
    700

发表回复

登录后才能评论
关注微信