标签含义

  • <% %> :'脚本' 标签,用于流程控制,无输出即直接使用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. ios修改UIIMage大小

    /** * 改变图片的大小 * * @param img 需要改变的图片 * @param newsize 新图片的大小 * * @return 返回修改后的新图片 */ - (UIImage *)s ...

  2. java8 lamda 表达式

  3. [Ajax三级联动 无刷新]

    三级联动 的效果图 html页面: <body> <label class="fl">区域:</label> <select class= ...

  4. SQL Server分页的存储过程写法以及性能比较

    ------创建数据库data_Test ----- create database data_Test GO use data_Test GO create table tb_TestTable - ...

  5. OGG-00446 分析与解决

    OGG-00446 分析与解决 Table of Contents 1. 00446 1.1. Missing filename opening checkpoint file 1.1.1. 错误信息 ...

  6. 解决oracle 物化视图刷新失败

    oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh ...

  7. 用fiddler来学http协议:为什么会有“response body is encoded click to decode”

    使用fiddler查看服务器返回的响应包的时候,我们常常会看到“response body is encoded click to decode”这样一个提示,只有点击它才能让响应包的主体内容从乱码变 ...

  8. Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息

    学习目的: selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的 正式步骤 需求背景:抓取淘宝美食 Step1:流程分析 搜索关键字 ...

  9. centos下kill、killall、pkill命令区别

    kill是用来终止进程的 首先可以通过ps aux查看系统有哪些进程正在运行. 1.用kill来杀死某一个进程 #kill,加选项-9,加PID,表示杀死进程编号为PID的这个进程# -1 重启#ki ...

  10. SQL优化手段

    一.建立索引 要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引(order by desc会非常影响效率). 二.避免在建立索引的字段进行计算操作. 三.使用预编 ...