模板引擎可以让将数据和HTML模板更加友好的结合,省去繁琐的字符串拼接,使代码更加易于维护。
文档地址:https://ejs.bootcss.com/#install
npm install ejs
<%
‘脚本’ 标签,用于流程控制,无输出。<%_
删除其前面的空格符<%=
输出数据到模板(输出是转义 HTML 标签)<%-
输出非转义的数据到模板<%#
注释标签,不执行、不输出内容<%%
输出字符串 ‘<%’%>
一般结束标签-%>
删除紧随其后的换行符_%>
将结束标签后面的空格符删除<%= key %>
可以把对应的key的值显示在页面上,可以直接把html标签内容展示 innerText<%- key %>
可以把对应的key的值显示在页面上,会把html渲染 innerHTML<% if (false) { %>
<div>条件为true时显示div>
<% } else { %>
<div>条件为false时执行div>
<% } %>
<% for(let i = 0; i < arr.length; i++) { %>
<li><%= arr[i] %>li>
<% } %>
<% arr.forEach((item) => { %>
<li><%= item %>li>
<% }) %>
<%- include('user/show', {user: user}); %>
EJS 并未对块(blocks)提供专门的支持,但是可以通过包含页眉和页脚来实现布局。
<%- include('header'); -%>
<h1>Titleh1>
<p>My pagep>
<%- include('footer'); -%>
如果想要在前端使用ejs,需要引入ejs.js
可以把模板字符串变成模板
let tHtml = `
<%= str %>
`;
let template = ejs.compile(tHtml)
template是ejs.compile调用后的返回值,它可以叫任意名字。
let html = template({str: "Hello World"})
html就是最终生成的HTML代码
ejs可以帮助我们更好的渲染对应的html,如果遇到渲染中需要有条件判断和循环,使用模板要比字符串拼接,更简单一些。
文档地址:https://aui.github.io/art-template/zh-cn/docs/
npm install art-template
通过调用模板引擎提供的template函数,告知模板引擎将特定模板和特定数据进行拼接,最终返回拼接结果。
// 模板引擎导入
const template = require('art-template');
// 模板编译
// 1.模板位置
// 2.向模板中传递要拼接的数据,对象类型,对象属性可以直接在模板中使用。
// result 拼接结果
const result = template('./views/index.html', {msg: 'Hello, art-template'});
通过模板引擎提供的特殊语法,告知模板引擎数据和模板具体的拼接细节。
即{{}}
,用来显式数据,将数据变量放入双大括号之中即可。
// 标准语法: {{ 数据 }}
// 原始语法:<%= 数据 %>
插值表达式中可以进行运算,最终显式运算的结果。
<h2>{{value}}h2>
<h2>{{a ? b : c}}h2>
<h2>{{a + b}}h2>
<h2><%= value %>h2>
<h2><%= a ? b : c %>h2>
<h2><%= a + b %>h2>
如果数据中携带HTML标签,默认不会解析标签,会将其转义后输出。使用以下方式可以解析标签。
{{@ value }}
{{if 条件}} ... {{/if}}
{{if v1}} ... {{else if v2}} ... {{/if}}
<% if (value) { %> ... <% } %>
<% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
{{each target}}
{{$index}} {{$value}}
{{/each}}
<% for(var i = 0; i < target.length; i++){ %>
<%= i %> <%= target[i] %>
<% } %>
使用子模板可以将网站公共区块(头部、底部)抽离到单独的文件中。
{{include './header.art'}}
<% include('./header.art') %>
使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件。
{{extend './layout.html'}}
{{block 'head'}} ... {{/block}}
优点
缺点
渲染的过程
优点
缺点
渲染的过程