ES6语法实现模板编译
来源:互联网 发布:上海unity3d培训学校 编辑:程序博客网 时间:2024/05/18 02:12
ES6语法实现模板编译
基础字符串模板
var template = `<ul> <% for(var i=0; i < data.supplies.length; i++) { %> <li><%= data.supplies[i] %></li> <% } %></ul>`;
思路:怎么编译这个模板字符串呢?根本原理可以用ES5语法的循环拼接字符串,这里设置这个循环拼接函数为echo()
将其转换为JavaScript表达式字符串
echo('<ul>');for(var i=0; i < data.supplies.length; i++) { echo('<li>'); echo(data.supplies[i]); echo('</li>');};echo('</ul>');
用正则来匹配将基础字符串模板替换为想要的字符串模板
var evalExpr = /<%=(.+?)%>/g;var expr = /<%([\s\S]+?)%>/g;template = template .replace(evalExpr, '`); \n echo( $1 ); \n echo(`') .replace(expr, '`); \n $1 \n echo(`');template = 'echo(`' + template + '`);';
然后,将template封装在一个函数里面返回,就可以了。
var script =`(function parse(data){ var output = ""; function echo(html){ output += html; } ${ template } return output;})`;return script;
注意:这里用到了ES6语法的字符串模板属性${ template },在模板中可以运行函数和使用变量
最后,将上面的内容拼装成一个模板编译函数compile。
var template = `<ul> <% for(var i=0; i < data.supplies.length; i++) { %> <li><%= data.supplies[i] %></li> <% } %></ul>`;function compile(template){ var evalExpr = /<%=(.+?)%>/g; var expr = /<%([\s\S]+?)%>/g; template = template .replace(evalExpr, '`); \n echo( $1 ); \n echo(`') .replace(expr, '`); \n $1 \n echo(`'); template = 'echo(`' + template + '`);'; var script = `(function parse(data){ var output = ""; function echo(html){ output += html; } ${ template } return output; })`; return script;}var parse = eval(compile(template));div.innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });
编译后输出
<ul> <li>broom</li> <li>mop</li> <li>cleaner</li></ul>
0 0
- ES6语法实现模板编译
- ES6模板字符串编译示例
- ES6-字符串扩展-模板编译
- ES6语法的reactjs组件babel编译
- ES6 let语法实现闭包
- 用es6语法实现event类
- ES6语法新特性let和template模板机制
- ES6语法
- es6语法
- 模板类的实现语法
- Vue js使用es6语法来实现组件
- ES6语法之函数式编程实现 pipeline
- ES6语法篇(其一)
- ES6 语法大概内容
- ES6新语法概览
- ES6核心内容之语法
- ES6 参数默认值语法
- Gulp使用ES6语法
- 最详细的PHP flush()与ob_flush()的区别详解
- springAOP的原理
- 字符缓冲流实现文本文件复制功能
- MaterialDesign使用总结
- 迷茫!工作之余要学点什么呢?
- ES6语法实现模板编译
- vue-router 路由元信息
- if(p&1)是什么意思
- 日本故事有感
- Linux内核启动卡在Uncompressing Linux... done, booting the kernel[转载]
- Windows cmd窗口中文乱码
- 如何获得领导赏识
- matlab中的sparse函数
- 锋利的Jquery(第二版)笔记(三)