首頁  >  文章  >  web前端  >  在Node.js中詳細解讀Jade入門

在Node.js中詳細解讀Jade入門

亚连
亚连原創
2018-06-11 14:30:581222瀏覽

這篇文章主要介紹了詳解Node.js模板引擎Jade入門,Jade是Node.js的一個模板引擎,現在分享給大家,也給大家做個參考。

Jade是Node.js的一個模板引擎,它藉鑒了Haml的很多地方,所以語法上和Haml比較相近。並且,Jade也支援空格。

1、標籤

在Jade裡,一行開頭的任何文字都被預設解釋成HTML標籤。而你只需要你寫開始標籤-注意:不需要加上「a8093152e673feb7aba1828c43532094」。因為Jade會幫我們渲染閉合和開始標籤。例如:

body 
  p 
    h1 Jade是Node.js的一个模板引擎
    p  它借鉴了Haml的很多地方,所以语法上和Haml比较相近。
  p 
    footer © Pandora

上面的Jade模板最終渲染出的HTML程式碼是:

<body>
  <p>
    <h1> Jade是Node.js的一个模板引擎</h1>
    <p>它借鉴了Haml的很多地方,所以语法上和Haml比较相近。</p>
  </p>
  <p>
    <footer>© Pandora</footer>
  </p>
</body>

注意:如果沒有寫標籤名,則預設就是p標籤。

2、變數/資料

傳給Jade模板的資料我們稱為locals。使用等號“=”來輸出一個變數的值。

(locals):

{
  title: "Express.js Guide",
  body: "The Comprehensive Book on Express.js"
}

Jade code :

h1= title
p= body

渲染輸出的HTML :

<h1>Express.js Guide</h1>
<p>The Comprehensive Book on Express.js</p>

3、讀取變數

Jade中讀取變數的值是透過#{name}來實現的。例如:

- var title = "Node"

p I love #{title}

在模板被編譯時變數的值就會被處理,所以,不要在可執行JavaScript(-)裡使用它。

4、屬性

屬性緊跟在標籤之後,用「()」括起來,多屬性用「,」分隔。例如:body (name1 = “value1”, name2 = “value2”)。

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="提交")

#輸出:

<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節點內容。例如:

a(href=url, data-active=isActive)
label
  input(type="checkbox", checked=isChecked)
  | yes / no

提供給上面範本的資料:

{
  url: "/logout",
  isActive: true,
  isChecked: false
}

最終渲染後輸出的HTML:

<a href="" data-active=" rel="external nofollow" data-active"></a>
<label>
  <input type="checkbox" />yes / no
</label>

注意:屬性值為false的屬性在輸出HTML程式碼時將被忽略;而沒有傳入屬性值時,將預設為true.

5、字面量

為了省事,可以直接在標籤名之後寫類名和ID名。例如:

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:

<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、文字

使用「|」符號輸出原始文字。

p 
  | 我两年前开始学习前端
  | 在此之间,我学过了html, jQuery, JavaScript, Python, Css3, HTML5, Bootstrap, D3.js, SVG...而现在我在学Node。并且我已经深深的爱上了前端。

7、Script 和Style區塊

使用「.」符號在HTML裡建立

script.
  console.log("Hello world!");
  setTiemout(function() {
    window.location.href = "http://csdn.net"
  }, 1000);

  console.log("Good bye!");

產生的程式碼:

<script>
  console.log("Hello world!");
  setTiemout(function() {
    window.location.href = "http://csdn.net"
  }, 1000);

  console.log("Good bye!");
</script>

同理,style.生成的是c9ccee2e6ea535a969eb3f532ad9fe89531ac245ce3e4fe3d50054a55f265927。

8、JavaScript程式碼

使用-,=或! =這三個符號在Jade中寫可以操縱輸出的可執行JS程式碼。這在要輸出HTML元素和注入JavaScript時是很有用的。不過,這麼做一定要小心避免跨站腳本(XSS)的攻擊。

例如,可以使用! =定義一個array, 輸出標籤資料:

- 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]

產生的程式碼如下:

<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的註解有兩種:

f35d6e602fd7d0f0edfa6f7d103c1b57. 輸出到頁面的-「//」
2cc198a1d5eb0d3eb508d858c9f5cbdb. 不輸出到頁面的- “//-”

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

//- 特殊注释,不会输出到HTML页面
p (id="footer") copyright 2016

輸出:

<!-- 普通注释,会输出到渲染后生成的HTML页面 -->
<p> Hello Jade content </p>

<p id="footer">copyright 2016</p>

10、if 語句

#給if語句加個前綴-,這樣就可以寫標準的JavaScript程式碼了; 也可以不用前綴、不用括號,當然後者更簡潔。

- 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語句就行了。

- var language = [&#39;JavaScript&#39;, &#39;Node&#39;, &#39;Python&#39;, &#39;Java&#39;]
p
  each value, index in language
    p= index + "," + value

輸出:

<p>
  <p>0. JavaScript</p>
  <p>1. Node</p>
  <p>2. Python</p>
  <p>3. Java</p>
</p>

範例2:

- 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

#輸出:

<p>
  <p>JavaScript: -1</p>
  <p>Node: 2</p>
  <p>Python: 3</p>
  <p>Java: 1</p>
</p>

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, …….)

#呼叫: 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: &#39;backbone&#39;}, {name: &#39;angular&#39;}, {name: "emberJS"}]
+table(js)

輸出:

<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裡:

include ./includes/header

注意: 這裡不用給模板名稱以及路徑添加雙引號或單引號。

再例如,從父目錄開始尋找:

include ../includes/footer

注意:不能再檔案名稱和檔案路徑中使用變數,因為includes/partials是在編譯時處理的,而不是執行時。

对于使用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

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在微信小程序中如何才能获取图片信息

在微信小程序中如何实现animation动画

使用百度地图如何去掉marker覆盖物具体该如何解决

在微信小程序中如何获取用户信息(详细教程)

在微信小程序中如何才可以获取用户手机号信息

在Vue中通过header组件如何开发(详细教程)

利用jquery如何写出PC端轮播图(详细教程)

详细讲解有关实现react服务器渲染问题

以上是在Node.js中詳細解讀Jade入門的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn