EJS学习(三)之语法规则中
⚠️实例均结合node,也就是AMD规范版本
ejs中使用render()表示渲染文本
接收三个参数:模版字符串、data、options,返回一个字符串
const ejs = require('ejs');ejs.delimiter = '$';var html = ejs.render(`<$ for(var i=0; i<num; i++ ) { -$><h2><$= user.name $></h2><h2><$= user.age $></h2><$ } -$>`,{user:{name:"wangkun",age:22,},num:2 },{rmWhitespace:true});console.log(html);// 输出: <h2>wangkun </h2><h2>22</h2> <h2>wangkun </h2><h2>22</h2>
ejs中使用renderFile()表示渲染文件
接收四个参数:模版字符串、data、options、callback,没有返回值
const ejs = require('ejs'); ejs.renderFile("./work/lesson12/view/1.ejs",{name:'wangkun'},function(err,data){ // err是错误,data是渲染完的数据if(err){console.log("出错了");}else{console.log(data);} });
ejs中使用<% %>输出脚本
实例一:ejs中的for循环
// 3.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% for(var i=0; i<json.arr.length; i++) {%><div>用户名:<%= json.arr[i].user %>年龄:<%= json.arr[i].age %></div><% } %> </body> </html>// 3.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/3.ejs',{json:{arr:[{user:"pear",age:"12"},{user:"apple",age:"13"},{user:"banana",age:"14"},{user:"orange",age:"15"}]} },function(err,data){console.log(data); });// 输出:<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><div>用户名:pear年龄:12</div><div>用户名:apple年龄:13</div><div>用户名:banana年龄:14</div><div>用户名:orange年龄:15</div></body> </html>
⚠️ 所有使用 <% %> 括起来的内容都会被编译成 Javascript,你可以在模版文件中像写 js 一样 Coding,也允许你声明变量,作用域就是当前模版,因为一个模版会被编译成一个 Javascript 函数
ejs中使用<%= %>转义输出
实例一:
// 1.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body>我的名字:<%= name %> // 表示赋值 <%= 12+5 %> <%= 'asdfasdf' %> </body> </html>// ejs1.js内容: const ejs = require('ejs'); ejs.renderFile("./work/lesson12/view/1.ejs",{name:'wangkun'},function(err,data){ // err是错误,data是渲染完的数据if(err){console.log("出错了");}else{console.log(data);} });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body>我的名字:wangkun 17 asdfasdf
</body> </html>
实例二:
// 2.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><div><%= json.arr[0].user %><%= json.arr[0].age %><%= json.arr[2].user %><%= json.arr[2].age %></div> </body> </html>// 2.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/2.ejs',{json:{arr:[{user:"pear",age:"12"},{user:"apple",age:"13"},{user:"banana",age:"14"},{user:"orange",age:"15"}]} },function(err,data){console.log(data); });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><div>pear12banana14</div> </body> </html>
实例三:
// 4.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%var str = "<div></div>"%><%= str %> </body> </html>// 4.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/4.ejs',{},function(err,data){console.log(data); });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><div></div> // ❗️发现是转义的 </body> </html>
ejs中使用<%- %>非转义输出
// 4.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%var str = "<div></div>"%><%- str %> </body> </html>// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><div></div> </body> </html>
ejs中使用<%% %>输出模版字符串
// 7.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%% if(user.name) { %><%%= user.name %><%% } %> </body> </html>// 7.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/7.ejs',{user:{name:"wangkun",age:22} },(err,data)=>{if(err) {console.error(err);}else {console.log(data);} });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% if(user.name) { %><%= user.name %><% } %> </body> </html>
ejs中使用<%_ _%>删除标签前后的空格
情况一:<%_ 和 _%>一起使用
// 9.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%_ if(user.name) { _%> <h2><%= user.name _%></h2><%_ }else{ _%><h2><%= user.age _%></h2><%_ } _%> </body> </html>// 9.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/9.ejs',{user:{name:"wangkun",age:22} },(err,data)=>{if(err) {console.error(err);}else {console.log(data);} });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2> // 注意标签前后没有空格 </body> </html> // 不使用<%_ _%>输出:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2> // 注意标签有空格 </body> </html>
情况二:单独使用<%_
// 9.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%_ if(user.name) { %> <h2><%= user.name %></h2><%_ }else{ %><h2><%= user.age %></h2><%_ } %> </body> </html>// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2> // 注意标签前后空格没有被删除</body> </html>
情况三:单独使用_%>
// 9.ejs内容; <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% if(user.name) { _%> <h2><%= user.name _%></h2><% }else{ _%><h2><%= user.age _%></h2><% } _%> </body> </html>// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2> // 标签前后没有空格,但是样式乱了</body> </html>
综合以上三种情况,强烈推荐<%_和_%>一起使用,可以有效删除标签前后空格并且样式不会乱☺️
ejs中使用<% -%>删除换行符
情况一:
// 10.ejs内容; <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% for(var i=0; i<num; i++ ) { -%><h2><%= user.name %></h2><h2><%= user.age %></h2><% } -%> </body> </html>// 输出 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2><h2>22</h2><h2>wangkun</h2> // 虽然标签前后空格删除了,但样式乱掉了<h2>22</h2></body> </html> // 不使用-%>输出
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h2>wangkun</h2><h2>22</h2><h2>wangkun</h2> // 标签前后有空格<h2>22</h2> </body> </html>
情况二:传配置参数rmWhitespace,这样格式就不会乱掉
// 10.ejs内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/10.ejs',{user:{name:"wangkun",age:22,},num:2 },{rmWhitespace:true},(err,data)=>{if(err) {console.error(err);}else {console.log(data);} });// 输出 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h2>wangkun</h2> <h2>22</h2> <h2>wangkun</h2> <h2>22</h2> </body> </html>
ejs中使用<%# %>进行注释没有任何输出
// 8.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><%# if(user.name) { %><%= user.name %><%# } %> </body> </html>// 8.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/8.ejs',{user:{name:"wangkun",age:22} },(err,data)=>{if(err) {console.error(err);}else {console.log(data);} });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body>wangkun</body> </html>
ejs中使用include引入内容
通过 include
指令将相对于模板路径中的模板片段包含进来。(需要提供 'filename' 参数。) 例如,如果存在 "./views/users.ejs" 和 "./views/user/show.ejs" 两个模板文件,你可以通过 <%-
include('user/show'); %>
代码包含后者。你可能需要能够输出原始内容的标签 (<%-
) 用于 include 指令,避免对输出的 HTML 代码做转义处理。
<ul><% users.forEach(function(user){ %><%- include('user/show', {user: user}); %><% }); %> </ul>
情况一:基础,引入文本文件
// 5.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% include a.txt %> </body> </html>// a.txt内容: jidhhdka kidutyui iiiiisnhakjdhgagd// 5.js内容: const ejs = require('ejs');ejs.renderFile('./work/lesson14/view/5.ejs',{},function(err,data){console.log(data); });// 输出: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body>jidhhdkakidutyuiiiiiisnhakjdhgagd </body> </html>
情况二:配合循环一起使用
// 6.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><% for(var i=0; i<5; i++) { %><% include a.txt %><% } %> </body> </html>// 输出 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body>jidhhdka kidutyui iiiiisnhakjdhgagdjidhhdka kidutyui iiiiisnhakjdhgagdjidhhdka kidutyui iiiiisnhakjdhgagdjidhhdka kidutyui iiiiisnhakjdhgagdjidhhdka kidutyui iiiiisnhakjdhgagd</body> </html>
情况三:引入css文件
// 7.ejs内容: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body> <!-- 通过type判断引入谁 --><% if(type == 'admin') { %><% include admin.css %><% }else {%><% include user.css %><% } %> </body> </html>// admin.css内容: div{width: 800px; }// user.css内容: div{width: 800px; }
注意:
1、include因为不是js中的语法,所以要单独占据一行
2、include后面不能是变量
3、Include 可以引用相对路径的模版文件,例如有 html/index.html 和 html/_block/head.html这两个文件, 你就可以在 index.html 这么用 <% include _block/head.html %>。
4、如果我们引入的是一个文本那么可以使用<% %>,但是如果是ejs或html为了防止将引入的html转义,我们要使用<%- %>
转载于:https://www.cnblogs.com/kunmomo/p/11466799.html
EJS学习(三)之语法规则中相关推荐
- python学习三-基础语法
python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...
- 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!
推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...
- Python基础学习:类语法规则
[类] 一.定义方式: class 类名(object): 二.调用方式: 1.类名() 2.对象 = 类名() #当一个变量 等于 一个类名() #时它就叫对象 三.方法: 1.公有方法() #方 ...
- ANTLR4入门【打造你自己的语法规则】
文章目录 什么是ANTLR4 ANTLR4的特点 ANTLR4的语法规则 语法规则的声明 .g4文件的代码规则 词法规则 语法规则 语法规则中的操作 如何使用ANTLR4 实战 IDEA安装ANTLR ...
- linux python命令无反应_Python学习第164课--Linux命令行特殊符号的意义及命令的语法规则...
[每天几分钟,从零入门python编程的世界!] 这节我们介绍Linux系统命令行中的一些特定的符号具有什么含义,以及命令行的语法规则. ●Linux命令行中特定的符号的含义 比如我登录到系统中之后, ...
- 【Drools三】打工人学习Drools高级语法
目录 1.global全局变量 2.query查询 3.function函数 4.LHS加强 4.1 复合值限制in/not in 4.2 条件元素eval 4.3 条件元素not 4.4 条件元素e ...
- 系统学习 TypeScript(二)——开发流程和语法规则
前言 我们已经知道了 TypeScript 是什么,以及为什么要用 TypeScript,今天,我们就来学习怎么初步使用它. TypeScript 的使用流程 原始的 TypeScript 文件以 . ...
- 炎炎夏日,深夜详谈nginx的配置中location和rewrite的语法规则(从入门到高手的第六步)
前言 在生产实际中,当用户页面请求后,很多是需要自动跳转到其他特定页面,这个时候往往可以利用nginx配置中location规则或rewrite语法进行设置. Nginx提供的全局变量或自己设置的变量 ...
- 【ProVerif学习笔记】3:进程宏和进程书写的语法规则
1 进程宏 进程宏(Process Macros)用来定义子进程,因为在用ProVerif对协议进行建模时,直接一个大的主进程比较混乱,进程宏的形式为: l e t R ( x 1 : t 1 , . ...
最新文章
- 【Android】 01. APP 进程启动和 ActivityThread 的关系
- C# Byte数组与Int16数组之间的转换
- java selector 源码_基于selector的源码分析和理解、思想和应用实践
- in the java search_LeetCode第[33]题(Java):Search in Rotated Sorted Array
- 记录今天写的几个正则,数字范围的校验
- 怎样成为一名更优秀的程序员?我总结出 7 条建议
- 在计算机组成原理中x,计算机组成原理xu2.ppt
- oracel 数据库问题 ORA-12547 ORA-12571
- gitlab根据hook钩子自动化部署
- windows反馈中心服务器,Windows 管理中心入门
- 项目一实时数仓数据采集
- DevOps ACA 软件代码与质量管理(六)
- Java实现百度贴吧自动签到器
- tensorbook深度学习笔记本电脑
- 中继器做表格--普通表格
- 弘辽科技:拼多多里有top是什么意思?如何提高排名?
- android 扫描二维码支付,Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)...
- Unity项目 - 捡苹果 Apple Picker
- 揭阳计算机短期培训机构,揭阳市PLC自动化速成班
- 广州爱奇迪派车管理系统