标签含义

  • <% %> :'脚本' 标签,用于流程控制,无输出即直接使用JavaScript语言。

  • <%= %>:转义输出数据到模板(输出是转义 HTML 标签)即在后端定义的变量,可以再前端显示输出

  • <%- %>:非转义输出数据到模板

  • <%# %>:注释标签,不执行、不输出内容

  • <%% %>: 输出字符串 '<%'

  • %>: 一般结束标签

  • -%> :删除紧随其后的换行符

  • <%_ 删除其前面的空格符

  • _%> 将结束标签后面的空格符删除

⚠️ 空格不是必须的

用法

var template = ejs.compile(str, options);
template(data);
// => 输出绘制后的 HTML 字符串 ejs.render(str, data, options);
// => 输出绘制后的 HTML 字符串 ejs.renderFile(filename, data, options, function(err, str){
// str => 输出绘制后的 HTML 字符串
});

options参数

  • cache 是否缓存解析后的模版,需要filename作为key;

  • filename 模版文件名被 cache 参数用做键值,同时也用于 include 语句

  • context 函数执行时的上下文环境

  • compileDebug 标识是否是编译debug,为true则会生成解析过程中的跟踪信息,用于调试;当为 false 时不编译调试语句

  • client 标识是否用于浏览器客户端运行,为true则返回解析后的可以单独运行的Function函数

  • open 代码开头标记,默认为'<%';

  • close 代码结束标记,默认为'%>';

  • delimiter 放在角括号中的字符,用于标记标签的开与闭,也就是自定义模版标签

  • debug 标识是否是debeg状态,debug为true则会输出生成的Function内容

  • _with 是否使用 with() {} 结构。如果为 false,所有局部数据将存储在 locals 对象上。

  • localsName 如果不使用 with ,localsName 将作为存储局部变量的对象的名称。默认名称是 locals

  • rmWhitespace 删除所有可安全删除的空白字符,包括开始与结尾处的空格。对于所有标签来说,它提供了一个更安全版本的 -%> (在一行的中间并不会剔除标签后面的换行符)。

  • escape 为 <%= 结构设置对应的转义(escape)函数。它被用于输出结果以及在生成的客户端函数中通过 .toString() 输出。(默认转义 XML)。

自定义分隔符

可针对单个模板或全局使用自定义分隔符:

情况一:使用ejs.render()

var ejs = require('ejs'),
users = ['geddy', 'neil', 'alex']; // 单个模板文件
ejs.render('<?= users.join(" | "); ?>', {users: users},
{delimiter: '?'});
// => 'geddy | neil | alex' // 全局
ejs.delimiter = '$';
ejs.render('<$= users.join(" | "); $>', {users: users});
// => 'geddy | neil | alex'

情况二:使用ejs.renderFiler()


// 单个模板文件
// 11.ejs内容:
<? for(var i=; i<num; i++ ) { -?>
<h2><?= user.name ?></h2>
<h2><?= user.age ?></h2>
<? } -?> // 11.js内容:
var ejs = require('ejs'); ejs.renderFile('./work/lesson14/view/11.ejs',{
user:{
name:"wangkun",
age:,
},
num:
},{rmWhitespace:true,delimiter: '?'},(err,data)=>{
if(err) {
console.error(err);
}else {
console.log(data);
}
}); // 输出:
<body>
<h2>wangkun</h2>
<h2></h2>
<h2>wangkun</h2>
<h2></h2>
</body> // 全局 // 12.ejs内容:
  <$ for(var i=0; i<num; i++ ) { -$>
    <h2><$= user.name $></h2>
    <h2><$= user.age $></h2>
  <$ } -$>
// 12.js内容:
  const ejs = require('ejs');
  ejs.delimiter = '$';
  ejs.renderFile('./work/lesson14/view/12.ejs',{
    user:{
      name:"wangkun",
      age:22,
    },
    num:2
  },{rmWhitespace:true},(err,data)=>{
    if(err) {
      console.error(err);
    }else {
      console.log(data);
    }
  });
 
  // 输出:
  

  <h2>wangkun</h2>
  <h2>22</h2>
  <h2>wangkun</h2>
  <h2>22</h2>
 

EJS学习(二)之语法规则上的更多相关文章

  1. JavaWeb学习 (二十八)————文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. Jade学习(二)之语法规则上

    语法 ⚠️实例均结合node jade缩进代表层级 html <html></html> html <html> head <head> style & ...

  3. git入门学习(二):新建分支/上传代码/删除分支

    一.git新建分支,上传代码到新的不同分支  我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...

  4. QML学习(二)——<QML语法>

    一.Qml类型 QML类型分为三类:基本类型.QML对象类型以及JavaScript类型 1 基本类型 我们可以再qt帮助文档中搜索基本类型查看 基本类型的概念是相对于QML对象类型而言的,QML 对 ...

  5. Spring基础学习(二)—详解Bean(上)

         在Spring配置文件中,用户不但可以将String.int等字面值注入Bean中,还可以将集合.Map等类型注入Bean中,此外还可以注入配置文件中其他定义的Bean. 一.字面值     ...

  6. 学习h264 的语法规则,如何才能看懂H264 的官方文档

    1. 今天想查h264 的帧率,查找资料如下: 首先要解析sps,得到两个关键的数值: num_units_in_tick, time_scale fps=time_scale/num_units_i ...

  7. php学习一:语法规则

    1.书写规则 在html中嵌入php的时候,需要有结束语,即<?php ...?>,在靠近结束符号的最后一个语句可以不用写分号: 但是在单独的php中,最后可以不用以?>来结尾; 2 ...

  8. XPath 学习二: 语法

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. 下面列出了最有用的路径表达式: 表达式 描述 nodename 选 ...

  9. nginx配置文件结构及location块语法规则

    一. nginx配置文件结构介绍 二. location语法规则: 用法示例: location [=|~|~*|^~] /uri/ { … } # 讲解如下: 1.  = 开头表示精确匹配 2.  ...

随机推荐

  1. spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式

    spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式 背景: 原来我准备是setDefaultDestinationName 设置队列的名称 ...

  2. 石川es6课程---7、数组

    石川es6课程---7.数组 一.总结 一句话总结: ^ 主要就map(映射:一个对一个),reduce(汇总:一堆出来一个),filter  过滤器,forEach 循环(迭代) 四个方法 ^ 使用 ...

  3. mongodb aggregate 聚合 操作(扁平化flatten)

    mongodb自带的函数非常多,最近用mongo做持久化数据库,遇到一个需求:子文档是个数组,把数组里的各个字段扁平化合到根文档中,查过资料后(主要是mongodb的文档和stackoverflow) ...

  4. [Java]手动构建SQL语法树(sql简单无嵌套)并输出与之对应的SQL语句之二

    Entry入口 main中自顶向下手动创建了sql语法树 package com.hy; // 构建SQL语法树 public class Entry { public static void mai ...

  5. OpenCV学习笔记(15)——更多的轮廓函数

    凸缺陷,以及如何找到凸缺陷 找某一点到一个多边形的最短距离 不同形状的匹配 1.凸缺陷 前面已经设计了轮廓的凸包和凸性缺陷的概念.OpenCV中有一个函数cv2.convexityDefect()可以 ...

  6. Android studio 项目支持JNI方法

    步骤: 1. build.gradle 配置如下,主要两项 ndk 和 sourceSets apply plugin: 'com.android.application' android { com ...

  7. Node.js的事件轮询Event Loop原理

    Node.js的事件轮询Event Loop原理解释 事件轮询主要是针对事件队列进行轮询,事件生产者将事件排队放入队列中,队列另外一端有一个线程称为事件消费者会不断查询队列中是否有事件,如果有事件,就 ...

  8. [NodeJS] 优缺点及适用场景

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  9. golang(07)结构体介绍

    golang支持面向对象的设计,一般支持面向对象的语言都会有class的设计,但是golang没有class关键字,只有struct结构体.通过结构体达到类的效果,这叫做大成若缺,其用不弊. stru ...

  10. weak_ptr用法

    http://note.youdao.com/noteshare?id=39c10fda83320b2851e2073a5f69321c