ES6模板字符串编译示例
2017-10-30 10:31
381 查看
<div id="div"></div>
let template = `
<ul>
<% for(let i=0; i < data.supplies.length; i++) { %>
<li><%= data.supplies[i] %></li>
<% } %>
</ul>
`;
function compile(template){
const evalExpr = /<%=(.+?)%>/g;
const expr = /<%([\s\S]+?)%>/g;
template = template
.replace(evalExpr, '`); \n echo( $1 ); \n echo(`')
.replace(expr, '`); \n $1 \n echo(`');
template = 'echo(`' + template + '`);';
let script =
`(function parse(data){
let output = "";
function echo(html){
output += html;
}
${ template }
return output;
})`;
return script;
}
let parse = eval(compile(template));
document.getElementById('div').innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });
let template = `
<ul>
<% for(let i=0; i < data.supplies.length; i++) { %>
<li><%= data.supplies[i] %></li>
<% } %>
</ul>
`;
function compile(template){
const evalExpr = /<%=(.+?)%>/g;
const expr = /<%([\s\S]+?)%>/g;
template = template
.replace(evalExpr, '`); \n echo( $1 ); \n echo(`')
.replace(expr, '`); \n $1 \n echo(`');
template = 'echo(`' + template + '`);';
let script =
`(function parse(data){
let output = "";
function echo(html){
output += html;
}
${ template }
return output;
})`;
return script;
}
let parse = eval(compile(template));
document.getElementById('div').innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });
<ul> <li>broom</li> <li>mop</li> <li>cleaner</li> </ul>
相关文章推荐
- ES6字符串模板,剩余参数,默认参数功能与用法示例
- ES6-字符串扩展-模板编译
- ES6-字符串扩展-模板字符串
- IDEA用ES6中的字符串模板报错
- es6 javascript的``模板字符串
- ES6 模板字符串(相当好用)
- [译]JavaScript:ES6中的模板字符串简介
- ES6 Template String 模板字符串
- ES6之模板字符串(Template String)
- es6 模板字符串
- ES6模板字符串
- 只为粗暴看一下ES6的字符串模板的性能
- ES6-字符串模板
- ES6 Template String 模板字符串
- ES6模板字符串
- ES6-字符串扩展-标签模板
- ES6中的模板字符串和新XSS Payload
- ES6系列之---模板字符串
- ES6学习总结之解构赋值及字符串模板
- ES6中的模板字符串和新XSS Payload