本文主要介紹了詳解Node.js模板引擎Jade入門,Jade是Node.js的一個模板引擎,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。
Jade是Node.js的一個模板引擎,它藉鑒了Haml的很多地方,所以語法上和Haml比較相近。並且,Jade也支援空格。
1、標籤
在Jade裡,一行開頭的任何文字都被預設解釋成HTML標籤。而你只需要你寫開始標籤-注意:不需要加上「<>」。因為Jade會幫我們渲染閉合和開始標籤。例如:
1 2 3 4 5 6 | body
p
h1 Jade是Node.js的一个模板引擎
p 它借鉴了Haml的很多地方,所以语法上和Haml比较相近。
p
footer © Pandora
|
登入後複製
上面的Jade模板最終渲染出的HTML程式碼是:
1 2 3 4 5 6 7 8 9 | <body>
<p>
<h1> Jade是Node.js的一个模板引擎</h1>
<p>它借鉴了Haml的很多地方,所以语法上和Haml比较相近。</p>
</p>
<p>
<footer>© Pandora</footer>
</p>
</body>
|
登入後複製
注意:如果沒有寫標籤名,則預設就是p標籤。
2、變數/資料
傳給Jade模板的資料我們稱為locals。 使用等號“=”來輸出一個變數的值。
(locals):
1 2 3 4 | {
title: "Express.js Guide" ,
body: "The Comprehensive Book on Express.js"
}
|
登入後複製
Jade code :
渲染輸出的HTML :
1 2 | <h1>Express.js Guide</h1>
<p>The Comprehensive Book on Express.js</p>
|
登入後複製
3、讀取變數
#Jade中讀取變數的值是透過#{name}來實現的。例如:
1 2 3 | - var title = "Node"
p I love #{title}
|
登入後複製
在範本被編譯時變數的值就會被處理,所以,不要在執行JavaScript(-)裡使用它。
4、屬性
屬性緊跟在標籤之後,用「()」括起來,多屬性用「,」分隔。例如:body (name1 = “value1”, name2 = “value2”)。
1 2 3 4 | p(id= "content" , class ='main')
a(href='http:
form(action= "/login" )
button(type= "submit" , value= "提交" )
|
登入後複製
輸出:
#
1 2 3 4 5 6 | <p id= "content" class ='main'>
<a href='http:
<form action= "/login" >
<button type= "submit" value= "提交" >
</form>
</p>
|
登入後複製
#動態屬性:
動態屬性即屬性的值是動態的,也就是用一個變數來表示屬性的值。符號「|」可以在新的一行裡寫HTML節點內容。例如:
1 2 3 4 | a(href=url, data-active=isActive)
label
input(type= "checkbox" , checked=isChecked)
| yes / no
|
登入後複製
提供給上面範本的資料:
1 2 3 4 5 | {
url: "/logout" ,
isActive: true,
isChecked: false
}
|
登入後複製
最終渲染後輸出的HTML:
1 2 3 4 | <a href= "" data-active= " rel=" external nofollow " data-active" ></a>
<label>
<input type= "checkbox" />yes / no
</label>
|
登入後複製
注意:屬性值為false的屬性在輸出HTML程式碼時將被忽略;而沒有傳入屬性值時,預設為true.
5、字面量
為了省事,可以直接在標籤名之後寫類別名稱和ID名稱。例如:
1 2 3 4 5 6 | p#content
p.lead.center
| Pandora_galen
#side-bar.pull-right
span.contact.span4
a(href= "/contact" rel= "external nofollow" rel= "external nofollow" ) contact me
|
登入後複製
渲染輸出的HTML:
#
1 2 3 4 5 6 7 8 | <p id= "content" >
<p class = "lead center" >
Pandora_galen
<p id= "side-bar" class = "pull-right" ></p>
<span class = "contact span4" >
<a href= "/contact" rel= "external nofollow" rel= "external nofollow" > contact me </a>
</span>
</p>
|
登入後複製
6、文字
使用「|」符號輸出原始文字。
1 2 3 | p
| 我两年前开始学习前端
| 在此之间,我学过了html, jQuery, JavaScript, Python, Css3, HTML5, Bootstrap, D3.js, SVG...而现在我在学Node。并且我已经深深的爱上了前端。
|
登入後複製
7、Script 和Style區塊
使用「.」符號在HTML裡建立
1 2 3 4 5 6 7 | script.
console.log( "Hello world!" );
setTiemout( function () {
window.location.href = "http://csdn.net"
}, 1000);
console.log( "Good bye!" );
|
登入後複製
產生的程式碼:
1 2 3 4 5 6 7 8 | <script>
console.log( "Hello world!" );
setTiemout( function () {
window.location.href = "http://csdn.net"
}, 1000);
console.log( "Good bye!" );
</script>
|
登入後複製
同理,style.產生的是。
8、JavaScript程式碼
使用-,=或! =這三個符號在Jade中寫可以操縱輸出的可執行JS程式碼。這在要輸出HTML元素和注入JavaScript時是很有用的。不過,這麼做一定要小心避免跨站腳本(XSS)的攻擊。
例如,可以使用! =定義一個array, 輸出標籤資料:
1 2 3 4 5 6 7 | - var arr = ['<a>', '<b>', '<c>']
ul
- for ( var i = 0; i < arr.length; i++)
li
span= i
span!= "unescaped:" + arr[i] + "vs."
span= "escaped:" + arr[i]
|
登入後複製
產生的程式碼如下:
1 2 3 4 5 | <ul>
<li><span>0</span><span>unescaped: <a>vs. </span><span>escaped: <a></span></li>
<li><span>1</span><span>unescaped: <b>vs. </span><span>escaped: <b></span></li>
<li><span>2</span><span>unescaped: <c>vs. </span><span>escaped: <c></span></li>
</ul>
|
登入後複製
範本引擎Jade和Handlebars的一個主要的區別是: Jade允許在程式碼裡寫幾乎所有的JavaScript ; 但是,Handlebars則限制了開發人員只能使用少量的內建和自訂的helpers。
9、註解
Jade的註解有兩種:
<1>. 輸出到頁面的— —“//”
<2>. 不輸出到頁面的- “//-”
1 2 3 4 5 | p Hello Jade content
p (id= "footer" ) copyright 2016
|
登入後複製
輸出:
#
1 2 3 4 | <strong><!-- 普通注释,会输出到渲染后生成的HTML页面 -->
<p> Hello Jade content </p>
<p id= "footer" >copyright 2016</p></strong>
|
登入後複製
10、if 語句
給if語句加個前綴-,這樣就可以寫標準的JavaScript程式碼了;也可以不用前綴、不用括號,當然後者比較簡潔。
1 2 3 4 5 6 7 | - var user = {}
- user.admin = Math.random() > 0.5
if user.admin
button( class = "launch" ) Launch Spacecraft
else
button( class = "login" ) Log in
|
登入後複製
此外,還有unless, 它相當於不或者! 。
注意: 每行的程式碼結尾處並沒有分號「;」
#11、each語句
在Jade裡迭代很簡單,只需要使用each語句就行了。
1 2 3 4 | - var language = ['JavaScript', 'Node', 'Python', 'Java']
p
each value, index in language
p= index + "," + value
|
登入後複製
輸出:#
1 2 3 4 5 6 | <p>
<p>0. JavaScript</p>
<p>1. Node</p>
<p>2. Python</p>
<p>3. Java</p>
</p>
|
登入後複製
範例2:
1 2 3 4 5 | - var language = ['JavaScript': -1, 'Node': 2, 'Python': 3, 'Java': 1]
p
each value, key in languages
p= key + ":" + value
|
登入後複製
輸出:
1 2 3 4 5 6 | <p>
<p>JavaScript: -1</p>
<p>Node: 2</p>
<p>Python: 3</p>
<p>Java: 1</p>
</p>
|
登入後複製
12、過濾器
過濾器的作用是: 用另一種語言來寫一個文字區塊;
1 2 3 4 | p
:markdown
# practical Node.js
[This book](http:
|
登入後複製
### 注意:要使用Markdown過濾器,需要安裝Markdown模組,以及Marked和Markdown NPM套件。 ############13、case################
1 2 3 4 5 6 7 8 9 | - 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, …….)
调用: +name(data)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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)
|
登入後複製
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <table>
<tr>
<td>express</td>
</tr>
<tr>
<td>Jade</td>
</tr>
<tr>
<td>Handlebars</td>
</tr>
</table>
<table>
<tr>
<td>backbone</td>
</tr>
<tr>
<td>angular</td>
</tr>
<tr>
<td>emberJS</td>
</tr>
</table>
|
登入後複製
15、include
include与引入JS和CSS外部文件很相似。它是自顶向下的方法: 在include其它文件的主文件里,我们决定要用什么。主文件会被首先处理(可以在主文件了定义数据locals),然后才会再接着处理主文件里所包含进来的子文件(子文件里可以使用主文件中定义的数据locals);
包含一个Jade模板,用include /path/filename.
例如,在文件A里:
1 | include ./includes/header
|
登入後複製
注意: 这里不用给模板名以及路径添加双引号或者单引号。
再例如,从父目录开始查找:
1 | include ../includes/footer
|
登入後複製
注意:不能再文件名和文件路径中使用变量,因为includes/partials是在编译时处理的,而不是在执行时。
对于使用Sass、Compass又或者Less的人这些事再熟悉不过的了。
16、extend
extend与include“唱对台戏”,正好相反,extend是一种自底向上的方法。它所包含的文件决定它要替换主文件中哪那一部分。
使用格式: extend filename 和 block blockname;
示例-1: 在文件file_a里:
1 2 3 4 5 6 | block header
p some default text
block content
p loading...
block footer
p copyright
|
登入後複製
示例-2: 在文件file_b里:
1 2 3 4 5 | extend file_a
block header
p very specific text
block content
.main-content
|
登入後複製
相关推荐:
详解基于模板引擎Jade的应用
学习 Jade_html/css_WEB-ITnose
node+express+jade制作简单网站指南_node.js
以上是Node.js模板引擎Jade詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!