Jade是Node.js的一個模板引擎,它借鑒了Haml的很多地方,所以語法上和Haml比較相近。并且,Jade也支持空格。
文成ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
1、標(biāo)簽
在Jade里,一行開頭的任何文本都被默認解釋成HTML標(biāo)簽。并且你只需要你寫開始標(biāo)簽——注意:不需要加“<>”。因為Jade會幫我們渲染閉合和開始標(biāo)簽。例如:
body div h2 Jade是Node.js的一個模板引擎 p 它借鑒了Haml的很多地方,所以語法上和Haml比較相近。 div footer © Pandora
上面的Jade模板最終渲染出的HTML代碼是:
Jade是Node.js的一個模板引擎
它借鑒了Haml的很多地方,所以語法上和Haml比較相近。
注意:如果沒有寫標(biāo)簽名,則默認就是div標(biāo)簽。
2、變量/數(shù)據(jù)
傳給Jade模板的數(shù)據(jù)我們稱之為locals。 使用等號“=”來輸出一個變量的值。
(locals):
{ title: "Express.js Guide", body: "The Comprehensive Book on Express.js" }
Jade code :
h2= title p= body
渲染輸出的HTML :
Express.js Guide
The Comprehensive Book on Express.js
3、讀取變量
Jade中讀取變量的值是通過#{name}來實現(xiàn)的。例如:
- var title = "Node" p I love #{title}
在模板被編譯時變量的值就會被處理,所以,不要在可執(zhí)行JavaScript(-)里使用它。
4、屬性
屬性緊跟在標(biāo)簽之后,且用“()”括起來,多屬性用“,”分隔。例如:body (name1 = “value1”, name2 = “value2”)。
div(id="content", class='main') a(, title='csdn主頁', target='_blank') CSDN:中國軟件聯(lián)盟 form(action="/login") button(type="submit", value="提交")
輸出:
動態(tài)屬性:
動態(tài)屬性即屬性的值是動態(tài)的,即用一個變量來表示屬性的值。符號“|”可以在新的一行里寫HTML節(jié)點內(nèi)容。例如:
a(href=url, data-active=isActive) label input(type="checkbox", checked=isChecked) | yes / no
提供給上面模板的數(shù)據(jù):
{ url: "/logout", isActive: true, isChecked: false }
最終渲染后輸出的HTML:
注意:屬性值為false的屬性在輸出HTML代碼時將被忽略;而沒有傳入屬性值時,將默認為true.
5、字面量
為了省事,可以直接在標(biāo)簽名之后寫類名和ID名。例如:
div#content p.lead.center | Pandora_galen #side-bar.pull-right // 沒有標(biāo)簽名,默認為“div” span.contact.span4 a(href="/contact" rel="external nofollow" rel="external nofollow" ) contact me
渲染輸出的HTML:
Pandora_galen
contact me
6、文本
使用“|”符號輸出原始文本。
div | 我兩年前開始學(xué)習(xí)前端 | 在此之間,我學(xué)過了html, jQuery, JavaScript, Python, Css3, HTML5, Bootstrap, D3.js, SVG...而現(xiàn)在我在學(xué)Node。并且我已經(jīng)深深的愛上了前端。
7、Script 和 Style塊
使用“.”符號在HTML里創(chuàng)建
script. console.log("Hello world!"); setTiemout(function() { window.location. }, 1000); console.log("Good bye!");
生成的代碼:
同理,style.生成的是。
8、JavaScript代碼
使用-,=或!=這三個符號在Jade中寫可以操縱輸出的可執(zhí)行JS代碼。這在要輸出HTML元素和注入JavaScript時是很有用的。不過,這么做一定要小心避免跨站腳本(XSS)的攻擊。
比如,可以使用!=定義一個array, 輸出標(biāo)簽數(shù)據(jù):
- var arr = ['', '', ''] ul -for (var i = 0; i < arr.length; i++) li span= i span!= "unescaped:" + arr[i] + "vs." span= "escaped:" + arr[i]
生成的代碼如下:
模板引擎Jade和Handlebars的一個主要的區(qū)別就是: Jade允許在代碼里寫幾乎所有的JavaScript ; 但是,Handlebars則限制了開發(fā)人員只能使用少量的內(nèi)置和自定義的helpers。
9、注釋
Jade的注釋有兩種:
<1>. 輸出到頁面的——“//”
<2>. 不輸出到頁面的—— “//-”
// 普通注釋,會輸出到渲染后生成的HTML頁面 p Hello Jade content //- 特殊注釋,不會輸出到HTML頁面 p (id="footer") copyright 2016
輸出:
Hello Jade content
10、if 語句
給if語句加個前綴-,這樣就可以寫標(biāo)準(zhǔn)的JavaScript代碼了; 也可以不用前綴、不用括號,當(dāng)然后者更簡潔。
- var user = {} - user.admin = Math.random() > 0.5 if user.admin button(class = "launch") Launch Spacecraft else button(class = "login") Log in
此外,還有unless, 它相當(dāng)于不或者!。
注意: 每行的代碼結(jié)尾處并沒有分號“;”
11、each語句
在Jade里迭代很簡單,只需要使用each語句就行了。
- var language = ['JavaScript', 'Node', 'Python', 'Java'] div each value, index in language p= index + "," + value
輸出:
0. JavaScript
1. Node
2. Python
3. Java
示例2:
- var language = ['JavaScript': -1, 'Node': 2, 'Python': 3, 'Java': 1] div each value, key in languages p= key + ":" + value
輸出:
JavaScript: -1
Node: 2
Python: 3
Java: 1
12、過濾器
過濾器的作用是: 用另一種語言來寫一個文本塊;
p :markdown # practical Node.js [This book](http://csdn.net) really helps to grasp many coponents needed for modern-day web development.
注意: 要想使用Markdown過濾器,需要安裝Markdown模塊,以及Marked和Markdown NPM包。
13、case
- var coins = Math.round(Math.random() * 10) case coins when 0 p You have no money when 1 p You have a coin default p You have #{coins} coins!
14、Function mixin
如果你使用過sass又或者compass的mixin你肯定不會陌生,而Jade 里mixin的使用方法和它們基本相同。
聲明的語法: mixin name(param, param2, …….)
調(diào)用: +name(data)
mixin row(items) tr each item, index in items td= item mixin table(tableData) table each row, index in tableData +row(row) - var node = [{name: "express"}, {name: "Jade"}, {name: "Handlebars"}] +table(node) - var js = [{name: 'backbone'}, {name: 'angular'}, {name: "emberJS"}] +table(js)
輸出:
express |
Jade |
Handlebars |
backbone |
angular |
emberJS |
15、include
include與引入JS和CSS外部文件很相似。它是自頂向下的方法: 在include其它文件的主文件里,我們決定要用什么。主文件會被首先處理(可以在主文件了定義數(shù)據(jù)locals),然后才會再接著處理主文件里所包含進來的子文件(子文件里可以使用主文件中定義的數(shù)據(jù)locals);
包含一個Jade模板,用include /path/filename.
例如,在文件A里:
include ./includes/header
注意: 這里不用給模板名以及路徑添加雙引號或者單引號。
再例如,從父目錄開始查找:
include ../includes/footer
注意:不能再文件名和文件路徑中使用變量,因為includes/partials是在編譯時處理的,而不是在執(zhí)行時。
對于使用Sass、Compass又或者Less的人這些事再熟悉不過的了。
16、extend
extend與include“唱對臺戲”,正好相反,extend是一種自底向上的方法。它所包含的文件決定它要替換主文件中哪那一部分。
使用格式: extend filename 和 block blockname;
示例-1: 在文件file_a里:
block header p some default text block content p loading... block footer p copyright
示例-2: 在文件file_b里:
extend file_a block header p very specific text block content .main-content
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。