首頁 > web前端 > js教程 > Node.js模板引擎Jade詳解

Node.js模板引擎Jade詳解

小云云
發布: 2018-01-20 09:13:05
原創
2010 人瀏覽過

本文主要介紹了詳解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 :


1

2

h1= title

p= body

登入後複製

渲染輸出的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=&#39;main&#39;)

  a(href=&#39;http://csdn.net&#39;, title=&#39;csdn主页&#39;, target=&#39;_blank&#39;) CSDN:中国软件联盟

  form(action="/login")

    button(type="submit", value="提交")

登入後複製

輸出:


#

1

2

3

4

5

6

<p id="content" class=&#39;main&#39;>

  <a href=&#39;http://csdn.net&#39; title=&#39;csdn主页&#39; target=&#39;_blank&#39;> CSDN:中国软件联盟</a>

  <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 // 没有标签名,默认为“p”

    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 = [&#39;<a>&#39;, &#39;<b>&#39;, &#39;<c>&#39;]

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

// 普通注释,会输出到渲染后生成的HTML页面

p Hello Jade content

 

//- 特殊注释,不会输出到HTML页面

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 = [&#39;JavaScript&#39;, &#39;Node&#39;, &#39;Python&#39;, &#39;Java&#39;]

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 = [&#39;JavaScript&#39;: -1, &#39;Node&#39;: 2, &#39;Python&#39;: 3, &#39;Java&#39;: 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://csdn.net) really helps to grasp many coponents needed for modern-day web development.

登入後複製
### 注意:要使用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: &#39;backbone&#39;}, {name: &#39;angular&#39;}, {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中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
怎麼實作 JavaScript點與圓的位置關係
來自於 1970-01-01 08:00:00
0
0
0
JavaScript鉤子函數是什麼?
來自於 1970-01-01 08:00:00
0
0
0
c++ 呼叫javascript
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板