art-template是款性能卓越的 js 模板引擎 https://aui.github.io/art-template/
特性
- 擁有接近 JavaScript 渲染極限的的性能
- 調試友好:語法、運行時錯誤日志精確到模板所在行;支持支持在模板文件上打斷點(Webpack Loader)
- 支持壓縮輸出頁面中的 HTML、CSS、JS 代碼
- 支持 Express、Koa、Webpack
- 支持模板繼承與子模板
- 兼容 EJS、Underscore、LoDash 模板語法
- 模板編譯后的代碼支持在嚴格模式下運行
- 支持 JavaScript 語句與模板語法混合書寫
- 支持自定義模板的語法解析規則
- 瀏覽器版本僅 6KB 大小
用法
(1)、使用
引用簡潔語法的引擎版本,例如: <script src="dist/template.js"></script>
(2)、表達式
{{ 與 }} 符號包裹起來的語句則為模板的邏輯表達式。
(3)、輸出表達式
對內容編碼輸出: {{content}}
不編碼輸出: {{#content}}
編碼可以防止數據中含有 HTML 字符串,避免引起 XSS 攻擊。
(4)、條件表達式
{{if admin}} <p>admin</p> {{else if code > 0}} <p>master</p> {{else}} <p>error!</p> {{/if}}
(5)、遍歷表達式
{{each list as value index}}
<li>{{index}} - {{value.user}}</li>
{{/each}}
(6)、模板包含表達式
用於嵌入子模板。
{{include 'template_name'}}
子模板默認共享當前數據,亦可以指定數據:{{include 'template_name' news_list}}
例子1
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>basic-demo</title> <script src="../dist/template.js"></script> </head> <body> <div id="content"></div> <script id="test" type="text/html"> {{if isAdmin}} <h1>{{title}}</h1> <ul> {{each list as value i}} <li>索引 {{i + 1}} :{{value}}</li> {{/each}} </ul> {{/if}} </script> <script> var data = { title: '基本例子', isAdmin: true, list: ['文藝', '博客', '攝影', '電影', '民謠', '旅行', '吉他'] }; var html = template('test', data); document.getElementById('content').innerHTML = html; </script> </body> </html>
例子2
<html> <head> <meta charset="UTF-8"> <title>no escape-demo</title> <script src="../dist/template.js"></script> </head> <body> <h1>不轉義HTML</h1> <div id="content"></div> <script id="test" type="text/html"> <p>不轉義:{{#value}}</p> <p>默認轉義: {{value}}</p> </script> <script> var data = { value: '<span style="color:#F00">hello world!</span>' }; var html = template('test', data); document.getElementById('content').innerHTML = html; </script> </body> </html>
art-template
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>include-demo</title> <script src="../dist/template.js"></script> </head> <body> <div id="content"></div> <script id="test" type="text/html"> <h1>{{title}}</h1> {{include 'list'}} </script> <script id="list" type="text/html"> <ul> {{each list as value i}} <li>索引 {{i + 1}} :{{value}}</li> {{/each}} </ul> </script> <script> var data = { title: '嵌入子模板', list: ['文藝', '博客', '攝影', '電影', '民謠', '旅行', '吉他'] }; var html = template('test', data); document.getElementById('content').innerHTML = html; </script> </body> </html>