标签含义

  • <% %> :'脚本' 标签,用于流程控制,无输出即直接使用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. Zookeeper 安装及命令行操作

    [参考文章]:[分布式]Zookeeper使用--命令行 [参考文章]:zookeeper的数据模型 [参考文章]:zookeeper ACL使用 1. 安装包下载 官方下载地址 选择一个具体的版本进 ...

  2. Nginx事件管理之核心模块ngx_events_module

    1. ngx_events_module核心模块的功能介绍 ngx_events_module 模式是一个核心模块,它的功能如下: 定义新的事件类型 定义每个事件模块都需要实现的ngx_event_m ...

  3. 图片上传(前端显示预览,后端php接收)

    html: <form action="{:Url('do_ls_law_upload')}" method="POST" accept-charset= ...

  4. LC 861. Score After Flipping Matrix

    We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...

  5. python汉字编解码问题

    http://www.cnblogs.com/rollenholt/archive/2011/08/01/2123889.html

  6. 2019.11.07【每天学点SAP小知识】Day2 - ABAP 7.40新语法 - 内表

    今天学习一下内表的表达式在ABAP 7.4之后的语法: SELECT * FROM mara INTO TABLE @DATA(gt_mara)UP TO 10 ROWS. DATA gt_mara_ ...

  7. Python学习小技巧之列表项的排序

    Python学习小技巧之列表项的排序 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 典型代码1:     data_list = [6, 9, 1, ...

  8. Spring集成CXF获取HttpServletRequest,HttpServletResponse

    最近的项目中,在Spring继承CXF中要用到request来获取IP,所以先要获取到HttpServletRequest对象,具体方法如下: 1.配置文件: <jaxrs:server id= ...

  9. ubuntu安装dockers和images:dvwa

    docker安装 安装前需要更新系统 apt-get update apt-get upgrade apt-get install docker.io 安装完之后就可以试下: docker docke ...

  10. ubuntu install themes && use it

    one step: I am going to show you the installation of a theme with Numix theme and Unity Tweak Tool. ...