EJS入门

一、为什么用EJS

在web项目中渲染页面我们很多时候我们会用jstl或者直接采用拼接字符串的方式,前者不够灵活,在处理一些复杂问题的时候会显得难以下手,后者足够灵活,但是就像ejs官网说的,字符串拼接方式,会让整个代码很丑陋,还破坏原有的html结构,大量的html拼接会让代码难以阅读,解决问题的方式就是使用模板,ejs算是js模板中最简单的了,对于java程序员来说,学习ejs完全不需要时间,因为他实在是很简单,这也是个人比较喜欢的原因。下面对比拼接字符串方式和ejs模板方式

js拼接字符串的方式:

var html = "<h1>"+data.title+"</h1>"
html += "<ul>"
for(var i=0; i<data.supplies.length; i++) {
    html += "<li><a href='supplies/"+data.supplies[i]+"'>"
    html += data.supplies[i]+"</a></li>"
}
html += "</ul>"
ejs模板方式

<h1><%= title %></h1>
<ul>
    <% for(var i=0; i<supplies.length; i++) { %>
        <li>
            <a href='supplies/<%= supplies[i] %>'>
                <%= supplies[i] %>
            </a>
        </li>
    <% } %>
</ul>

二、怎么用EJS

1.将一个模板定义为为.ejs 结尾的文件,模板内容就像上面那样,使用<%= %> 赋值,在<%%>中间是js代码,就像你平时写js一样

2.通过function EJS(options)创建一个EJS实例,其中options有如下属性

url:模板路径,通过ajax加载模板

text:模板String串,直接使用这个串作为模板

element{string or element}:当为String时表示dom元素的id,当为element时即document.getElementById('id')本身

name{string}:用来缓存模板,默认是DOM ID或者URL

cache:是否缓存,默认缓存

url、text、element分别为获取模板的三种途径,即ajax请求外部模板,js的String串,DOM的innerHTML

3.render(data)

new EJS({url: '/template.ejs'}).render(data)

4.update(element,url_or_data)

url_or_data是null时,返回一个function(obj)函数,其中obj是用来render模板的数据,

url_or_data是url时,通过ajax获取数据

url_or_data是data时,渲染数据

f = new EJS({url: '/mytemplate.ejs'}).update('my_element')

new EJS({url: '/mytemplate.ejs'}).update('my_element', '/data.json')

new EJS({url: '/mytemplate.ejs'}).update('my_element', {supplies:['mop']})

三、demo

新建一个index.html,内容如下:其中test.js是测试js

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	
</head>
<body>
	<div  id="test">
		
	</div>

</body>
</html>
<script type="text/javascript" src="ejs.js"></script>
<script type="text/javascript" src="test.js"></script>

1.第一种调用模板的方法,通过url请求模板,适用于多个页面共用一个模板

在同级目录下新建一个template.ejs文件,内容如下

<table>
	<thead>
		<th>姓名</th>
		<th>年龄</th>
	</thead>	
	<tbody>
	<%for(var i=0;i<list.length;i++){var u=list[i];%>
		<tr>
		<td><%=u.name%></td>
		<td><%=u.age%></td>
		</tr>
	<%}%>
	</tbody>

</table>

var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};
	var options={
		url:'template.ejs'
	}
	var html=new EJS(options).render(data);
	document.getElementById("test").innerHTML=html;


2.第二种调用模板的方法,内部模板,通过element获取,如果这个模板只在此页使用

在index.html中添加以下模板,注意内部模板跟外部模板的区别

<script type="text/html" id="template">
<table>
	<thead>
		<th>姓名</th>
		<th>年龄</th>
	</thead>	
	<tbody>
	[%for(var i=0;i<list.length;i++){var u=list[i];%]
		<tr>
		<td>[%=u.name%]</td>
		<td>[%=u.age%]</td>
		</tr>
	[%}%]
	</tbody>
</table>
</script>

var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};
	var options={
		element:"template"
	}
	var html=new EJS(options).render(data);document.getElementById("test").innerHTML=html;

 这里的element可以是值为模板id的string,也可以是element即为document.getElementById("template") 

3.第三种String串方式在js中声明的模板,不再说了

4.上面只说了render方法,update方法的使用如下

var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};
	var options={
		element:"template"
	}
	new EJS(options).update("test",data);

var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};
	var options={
		element:"template"
	}
	var  template=new EJS(options).update("test");
	template(data)

也可以直接通过url获取data

var options={
		element:"template"
	}
	new EJS(options).update("test","data.json");

最终的结果都是一样的,如下


以上基本就是EJS的所有语法了,当然EJS还做了一些扩展



  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
EJS(Embedded JavaScript)是一种基于JavaScript的模板引擎,可以用来生成HTML、XML等文档。EJS提供了一种简单的方式来将数据嵌入到HTML页面中。其中,include指令用于在EJS模板中引入其他模板文件。 使用include指令,需要在模板中使用以下语法: ``` <% include path/to/other/template.ejs %> ``` 其中,path/to/other/template.ejs是要引入的模板文件的路径。注意,在使用include指令时,被引入的模板文件中不应该包含任何与当前模板文件相同的变量或函数,否则可能会导致冲突。 需要注意的是,EJS并没有内置的include功能,而是通过在模板中定义一个自定义的include函数来实现的。因此,在使用include指令之前,需要在程序中定义这个函数。下面是一个例子: ``` const ejs = require('ejs'); const fs = require('fs'); ejs.filters.include = function (path) { const file = fs.readFileSync(path, 'utf8'); return ejs.render(file, this); }; const template = ` <html> <head> <title>Example</title> </head> <body> <% include path/to/other/template.ejs %> </body> </html>`; const data = { name: 'John' }; const output = ejs.render(template, data); console.log(output); ``` 在上面的例子中,我们首先定义了一个自定义的include函数,然后在模板中使用include指令来引入其他模板文件。当渲染模板时,EJS会自动调用include函数来处理这些指令,并将被引入的模板文件和当前模板文件的数据合并起来生成最终的HTML输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值