亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Node.js模板引擎Jade入門(mén)

 更新時(shí)間:2018年01月19日 16:26:31   作者:Dragon_GL  
這篇文章主要介紹了詳解Node.js模板引擎Jade入門(mén),Jade是Node.js的一個(gè)模板引擎,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Jade是Node.js的一個(gè)模板引擎,它借鑒了Haml的很多地方,所以語(yǔ)法上和Haml比較相近。并且,Jade也支持空格。

1、標(biāo)簽

在Jade里,一行開(kāi)頭的任何文本都被默認(rèn)解釋成HTML標(biāo)簽。并且你只需要你寫(xiě)開(kāi)始標(biāo)簽——注意:不需要加“<>”。因?yàn)椋剩幔洌鍟?huì)幫我們渲染閉合和開(kāi)始標(biāo)簽。例如:

body 
  div 
    h1 Jade是Node.js的一個(gè)模板引擎
    p  它借鑒了Haml的很多地方,所以語(yǔ)法上和Haml比較相近。
  div 
    footer &copy; Pandora

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

<body>
  <div>
    <h1> Jade是Node.js的一個(gè)模板引擎</h1>
    <p>它借鑒了Haml的很多地方,所以語(yǔ)法上和Haml比較相近。</p>
  </div>
  <div>
    <footer>&copy; Pandora</footer>
  </div>
</body>

注意:如果沒(méi)有寫(xiě)標(biāo)簽名,則默認(rèn)就是div標(biāo)簽。

2、變量/數(shù)據(jù)

傳給Jade模板的數(shù)據(jù)我們稱(chēng)之為locals。 使用等號(hào)“=”來(lái)輸出一個(gè)變量的值。

(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中讀取變量的值是通過(guò)#{name}來(lái)實(shí)現(xiàn)的。例如:

- var title = "Node"

p I love #{title}

在模板被編譯時(shí)變量的值就會(huì)被處理,所以,不要在可執(zhí)行JavaScript(-)里使用它。

4、屬性

屬性緊跟在標(biāo)簽之后,且用“()”括起來(lái),多屬性用“,”分隔。例如:body (name1 = “value1”, name2 = “value2”)。

div(id="content", class='main')
  a(, title='csdn主頁(yè)', target='_blank') CSDN:中國(guó)軟件聯(lián)盟
  form(action="/login")
    button(type="submit", value="提交")

輸出:

<div id="content" class='main'>
  <a  title='csdn主頁(yè)' target='_blank'> CSDN:中國(guó)軟件聯(lián)盟</a>
  <form action="/login">
    <button type="submit" value="提交">
  </form>
</div>

動(dòng)態(tài)屬性:

動(dòng)態(tài)屬性即屬性的值是動(dòng)態(tài)的,即用一個(gè)變量來(lái)表示屬性的值。符號(hào)“|”可以在新的一行里寫(xiě)HTML節(jié)點(diǎn)內(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:

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

注意:屬性值為false的屬性在輸出HTML代碼時(shí)將被忽略;而沒(méi)有傳入屬性值時(shí),將默認(rèn)為true.

5、字面量

為了省事,可以直接在標(biāo)簽名之后寫(xiě)類(lèi)名和ID名。例如:

div#content
  p.lead.center
    | Pandora_galen
    #side-bar.pull-right // 沒(méi)有標(biāo)簽名,默認(rèn)為“div”
    span.contact.span4
      a(href="/contact" rel="external nofollow" rel="external nofollow" ) contact me

渲染輸出的HTML:

<div id="content">
  <p class="lead center">
  Pandora_galen
  <div id="side-bar" class="pull-right"></div>
  <span class="contact span4">
    <a href="/contact" rel="external nofollow" rel="external nofollow" > contact me </a>
  </span>
</div>

6、文本

使用“|”符號(hào)輸出原始文本。

div 
  | 我兩年前開(kāi)始學(xué)習(xí)前端
  | 在此之間,我學(xué)過(guò)了html, jQuery, JavaScript, Python, Css3, HTML5, Bootstrap, D3.js, SVG...而現(xiàn)在我在學(xué)Node。并且我已經(jīng)深深的愛(ài)上了前端。

7、Script 和 Style塊

使用“.”符號(hào)在HTML里創(chuàng)建

script.
  console.log("Hello world!");
  setTiemout(function() {
    window.location.
  }, 1000);

  console.log("Good bye!");

生成的代碼:

<script>
  console.log("Hello world!");
  setTiemout(function() {
    window.location.
  }, 1000);

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

同理,style.生成的是<style></style>。

8、JavaScript代碼

使用-,=或!=這三個(gè)符號(hào)在Jade中寫(xiě)可以操縱輸出的可執(zhí)行JS代碼。這在要輸出HTML元素和注入JavaScript時(shí)是很有用的。不過(guò),這么做一定要小心避免跨站腳本(XSS)的攻擊。

比如,可以使用!=定義一個(gè)array, 輸出標(biāo)簽數(shù)據(jù):

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

生成的代碼如下:

<ul>
  <li><span>0</span><span>unescaped: <a>vs. </span><span>escaped: &lt;a&gt;</span></li>
  <li><span>1</span><span>unescaped: <b>vs. </span><span>escaped: &lt;b&gt;</span></li>
  <li><span>2</span><span>unescaped: <c>vs. </span><span>escaped: &lt;c&gt;</span></li>
</ul>

模板引擎Jade和Handlebars的一個(gè)主要的區(qū)別就是: Jade允許在代碼里寫(xiě)幾乎所有的JavaScript ; 但是,Handlebars則限制了開(kāi)發(fā)人員只能使用少量的內(nèi)置和自定義的helpers。

9、注釋

Jade的注釋有兩種:

<1>. 輸出到頁(yè)面的——“//”
<2>. 不輸出到頁(yè)面的—— “//-”

// 普通注釋?zhuān)瑫?huì)輸出到渲染后生成的HTML頁(yè)面
p Hello Jade content

//- 特殊注釋?zhuān)粫?huì)輸出到HTML頁(yè)面
p (id="footer") copyright 2016

輸出:

<!-- 普通注釋?zhuān)瑫?huì)輸出到渲染后生成的HTML頁(yè)面 -->
<p> Hello Jade content </p>

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

10、if 語(yǔ)句

給if語(yǔ)句加個(gè)前綴-,這樣就可以寫(xiě)標(biāo)準(zhǔn)的JavaScript代碼了; 也可以不用前綴、不用括號(hào),當(dāng)然后者更簡(jiǎn)潔。

- 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é)尾處并沒(méi)有分號(hào)“;”

11、each語(yǔ)句

在Jade里迭代很簡(jiǎn)單,只需要使用each語(yǔ)句就行了。

- var language = ['JavaScript', 'Node', 'Python', 'Java']
div
  each value, index in language
    p= index + "," + value

輸出:

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

示例2:

- var language = ['JavaScript': -1, 'Node': 2, 'Python': 3, 'Java': 1]

div 
  each value, key in languages
    p= key + ":" + value 

輸出:

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

12、過(guò)濾器

過(guò)濾器的作用是: 用另一種語(yǔ)言來(lái)寫(xiě)一個(gè)文本塊;

p
  :markdown
    # practical Node.js
    [This book](http://csdn.net) really helps to grasp many coponents needed for modern-day web development.

注意: 要想使用Markdown過(guò)濾器,需要安裝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

如果你使用過(guò)sass又或者compass的mixin你肯定不會(huì)陌生,而Jade 里mixin的使用方法和它們基本相同。

聲明的語(yǔ)法: 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) 

輸出:

<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其它文件的主文件里,我們決定要用什么。主文件會(huì)被首先處理(可以在主文件了定義數(shù)據(jù)locals),然后才會(huì)再接著處理主文件里所包含進(jìn)來(lái)的子文件(子文件里可以使用主文件中定義的數(shù)據(jù)locals);

包含一個(gè)Jade模板,用include /path/filename.

例如,在文件A里:

include ./includes/header

注意: 這里不用給模板名以及路徑添加雙引號(hào)或者單引號(hào)。

再例如,從父目錄開(kāi)始查找:

include ../includes/footer

注意:不能再文件名和文件路徑中使用變量,因?yàn)閕ncludes/partials是在編譯時(shí)處理的,而不是在執(zhí)行時(shí)。

對(duì)于使用Sass、Compass又或者Less的人這些事再熟悉不過(guò)的了。

16、extend

extend與include“唱對(duì)臺(tái)戲”,正好相反,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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 快速了解Node中的Stream流是什么

    快速了解Node中的Stream流是什么

    今天小編就為大家分享一篇關(guān)于快速了解Node中的Stream流是什么,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • gulp解決跨域的配置文件問(wèn)題

    gulp解決跨域的配置文件問(wèn)題

    下面小編就為大家?guī)?lái)一篇gulp解決跨域的配置文件問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • express項(xiàng)目文件目錄說(shuō)明以及功能描述詳解

    express項(xiàng)目文件目錄說(shuō)明以及功能描述詳解

    這篇文章主要給大家介紹了關(guān)于express項(xiàng)目文件目錄說(shuō)明以及功能描述的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何使用Node.js爬取任意網(wǎng)頁(yè)資源并輸出PDF文件到本地

    如何使用Node.js爬取任意網(wǎng)頁(yè)資源并輸出PDF文件到本地

    這篇文章主要介紹了使用Node.js爬取任意網(wǎng)頁(yè)資源并輸出高質(zhì)量PDF文件到本地,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編就來(lái)和大家一起學(xué)習(xí)吧
    2019-06-06
  • Nodejs讀取文件時(shí)相對(duì)路徑的正確寫(xiě)法(使用fs模塊)

    Nodejs讀取文件時(shí)相對(duì)路徑的正確寫(xiě)法(使用fs模塊)

    本篇文章主要介紹了linux 環(huán)境 mysql寫(xiě)入中文報(bào)錯(cuò)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • node.js支持多用戶web終端實(shí)現(xiàn)及安全方案

    node.js支持多用戶web終端實(shí)現(xiàn)及安全方案

    這篇文章主要介紹了node.js支持多用戶web終端實(shí)現(xiàn)方案以及web終端安全性保證的解決方法,一起學(xué)習(xí)參考下。
    2017-11-11
  • Node.js流管理利器Destroy包使用方法詳解

    Node.js流管理利器Destroy包使用方法詳解

    在 Node.js 中,流(Streams)是處理大量數(shù)據(jù)的高效方式,然而,流的不當(dāng)處理可能會(huì)引發(fā)資源泄露,本文將詳解如何使用 destroy 包,確保流被正確銷(xiāo)毀,需要的朋友可以參考下
    2024-05-05
  • 如何在node的express中使用socket.io

    如何在node的express中使用socket.io

    這篇文章主要介紹了如何在node的express中使用socket.io,需要的朋友可以參考下
    2014-12-12
  • 使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法

    這篇文章主要介紹了使用node搭建自動(dòng)發(fā)圖文微博機(jī)器人的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • node.js使用express框架進(jìn)行文件上傳詳解

    node.js使用express框架進(jìn)行文件上傳詳解

    在本篇內(nèi)容里小編給大家整理了關(guān)于node.js使用express框架進(jìn)行文件上傳的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03

最新評(píng)論