可以根据程序员指定的模板结构和数据,自动生成一个完整的html即为模板引擎
<body>
<div id="container"></div>
<script src="./js/template-web.js"></script>
<!-- 定义模板 -->
<script type="text/html" id="tpl-user">
<h1>{{name}}+{{age}}</h1>
</script>
<script>
// 定义要渲染的数据
var data = {
name: 'mod',
age: 17
};
// 调用template函数
var htmlStr = template('tpl-user', data);
console.log(htmlStr);
container.innerHTML = htmlStr;
</script>
</body>
{{}}
语法,在{{}}
内可以进行变量输出或循环数组等操作{{@value}}
{{}}
中使用if else if /if的方式 {{if value}}
输出
{{else if newValue}
输出new
{{/if}}
{{}}
内通过each语法循环数组,当前循环的索引使用$index
进行访问,循环项使用$value
进行访问{{each arr}}
{{$index}} {{$value}}
{{/each}}
{{value | filterName}}
,过滤器语法类似管道操作符,它的上一个输出作为下一个输入;template.defaults.imports.filterName = function(value){//return ...}
function template(id, data){
var str = document.getElementById(id).innerHTML;
var pattern = /{{\s*([a-zA-Z]+)\s*}}/;
var result = null;
while(result = pattern.exec(str)){
str = str.replace(result[0], data[result[1]])
}
return str;
}