国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

模板引擎原理

2024-04-27 15:04:02
字體:
來源:轉載
供稿:網友

模板編譯用的還是比較多的,像template 、underscore的插件等等,不過隨著vue ,angular ,avalon 等雙向數據綁定的出現,也基本上用的不多了。都知道模板引擎都是正則匹配,但是都能想清楚么?

比如這么一個模板實例,讓你用函數,如何去實現?

var template = ` <ul> <% for(var i=0;i<data.supplies.length;i++) { %> <li> <%= data.supplies[i] %> </li> <% } %> </ul> `

都清楚模板字符串中<%…%> 是放置js代碼,使用<%= … %> 是輸出js的表達式。

想辦法將上述的模板字符串轉換為如下形式:

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 aa(data){ var output = ''; function echo(html){ output += html; } ${ template } return output; }) ` return script; }

整理一下,如下:

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 aa(data){ var output = ''; function echo(html){ output += html; } ${ template } return output; }) ` return script; } console.log(eval(compile(template))) var parse = eval(compile(template)); document.body.innerHTML = parse({ supplies:['broom','mop','clear'] });
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙游县| 左权县| 克东县| 永平县| 崇阳县| 横峰县| 洛川县| 淳安县| 吐鲁番市| 瑞丽市| 溧水县| 涪陵区| 清水县| 土默特左旗| 鞍山市| 通渭县| 镇赉县| 巴林左旗| 宜春市| 涞源县| 策勒县| 宜黄县| 缙云县| 永清县| 华宁县| 兖州市| 英山县| 岚皋县| 永新县| 成都市| 岗巴县| 长宁区| 长顺县| 左云县| 宜宾市| 卓资县| 英吉沙县| 桃源县| 大同县| 青阳县| 高台县|