語法
art-template 支持標准語法與原始語法。標准語法可以讓模板易讀寫,而原始語法擁有強大的邏輯表達能力。
標准語法支持基本模板語法以及基本 JavaScript 表達式;原始語法支持任意 JavaScript 語句,這和 EJS 一樣。
一、輸出
標准語法
{{value}} |
原始語法
<%= value %> |
模板一級特殊變量可以使用 $data
加下標的方式訪問:
{{$data['user list']}} |
二、原文輸出
標准語法
{{@ value }} |
原始語法
{{%- value %}} |
原文輸出語句不會對 HTML
內容進行轉義處理,可能存在安全風險,請謹慎使用。
三、條件
標准語法
{{if value}} ... {{/if}} |
原始語法
<% if (value) { %> ... <% } %> |
四、循環
標准語法
{{each target}} |
{{each target $vallist $indexcomment}} |
原始語法
<% for(var i = 0; i < target.length; i++){ %> |
1、模板繼承target
支持 array
與 object
的迭代,其默認值為 $data
。
2、$value
與 $index
可以自定義:{{each target val key}}
。
五、變量
標准語法
{{set temp = data.sub.content}} |
原始語法
<% var temp = data.sub.content; %> |
六、模板繼承
標准語法
{{extend './layout.art'}} |
原始語法
<% extend('./layout.art') %> |
模板繼承允許你構建一個包含你站點共同元素的基本模板“骨架”。范例:
<!--layout.art--> |
<!--index.art--> |
渲染 index.art 后,將自動應用布局骨架。
子模板
標准語法
{{include './header.art'}} |
原始語法
<% include('./header.art') %> |
1、data
數默認值為 $data
;標准語法不支持聲明 object
與 array
,只支持引用變量,而原始語法不受限制。
2、art-template 內建 HTML 壓縮器,請避免書寫 HTML 非正常閉合的子模板,否則開啟壓縮后標簽可能會被意外“優化。
過濾器
注冊過濾器
template.defaults.imports.dateFormat = function(date, format){/*[code..]*/}; |
過濾器函數第一個參數接受目標值。
標准語法
{{date | timestamp | dateFormat 'yyyy-MM-dd hh:mm:ss'}} |
{{value | filter}}
過濾器語法類似管道操作符,它的上一個輸出作為下一個輸入。
如果想修改 {{
}}
與 <%
%>
,請參考 解析規則。
注釋
artTemplate的注釋和html一樣
<!-- -->
調試
template.defaults.debug
art-template 內建調試器,能夠捕獲到語法與運行錯誤,並且支持自定義的語法。在 NodeJS 中調試模式會根據環境變量自動開啟:process.env.NODE_ENV !== 'production'
設置 template.defaults.debug=true
后,等同於:
{ |
更多參見 選項。
模板變量
template.defaults.imports
模板通過 $imports
可以訪問到模板外部的全局變量與導入的變量。
導入變量
template.defaults.imports.log = console.log; |
$imports.log("hello world") |
內置變量清單
-
$data
傳入模板的數據 -
$imports
外部導入的變量以及全局變量 -
print
字符串輸出函數 -
include
子模板載入函數 -
extend
模板繼承模板導入函數 -
block
模板塊聲明函數
解析規則
template.defaults.rules
art-template 可以自定義模板解析規則,默認配置了原始語法與標准語法。
修改界定符
// 原始語法的界定符規則 |
它們是一個正則表達式,你可以只修改界定符部分。例如修改 <%
%>
為 <?
?>
:
var rule = template.defaults.rules[0]; |
添加語法
從一個簡單的例子說起,讓模板引擎支持 ES6 ${name}
模板字符串的解析:
template.defaults.rules.push({ |
其中 test
是匹配字符串正則,use
是匹配后的調用函數。關於 use
函數:
- 參數:一個參數為匹配到的字符串,其余的參數依次接收
test
正則的分組匹配內容 - 返回值:必須返回一個對象,包含
code
與output
兩個字段:code
轉換后的 JavaScript 語句output
描述code
的類型,可選值:'escape'
編碼后進行輸出'raw'
輸出原始內容false
不輸出任何內容
值得一提的是,語法規則對渲染速度沒有影響,模板引擎編譯器會幫你優化渲染性能。
壓縮頁面
template.defaults.minimize
art-template 內建的壓縮器可以壓縮 HTML、JS、CSS,它在編譯階段運行,因此完全不影響渲染速度,並且能夠加快網絡傳輸。
開啟
template.defaults.minimize = true; |
配置
參見:https://github.com/kangax/html-minifier
默認配置
template.defaults.htmlMinifierOptions = {
|
選項
template.defaults
// 模板名
|
參考