Jade是Node.js的一个模板引擎,它借鉴了Haml的很多地方,所以语法上和Haml比较相近。并且,Jade也支持空格。

1、标签

在Jade里,一行开头的任何文本都被默认解释成HTML标签。并且你只需要你写开始标签——注意:不需要加“<>”。因为Jade会帮我们渲染闭合和开始标签。例如:

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

上面的Jade模板最终渲染出的HTML代码是:

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

注意:如果没有写标签名,则默认就是div标签。

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”)。

div(id="content", class='main')a(href='http://csdn.net', title='csdn主页', target='_blank') CSDN:中国软件联盟form(action="/login")button(type="submit", value="提交")

输出:

<div id="content" class='main'><a href='http://csdn.net' title='csdn主页' target='_blank'> CSDN:中国软件联盟</a><form action="/login"><button type="submit" value="提交"></form>
</div>

动态属性:

动态属性即属性的值是动态的,即用一个变量来表示属性的值。符号“|”可以在新的一行里写HTML节点内容。例如:

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

提供给上面模板的数据:

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

最终渲染后输出的HTML:

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

注意:属性值为false的属性在输出HTML代码时将被忽略;而没有传入属性值时,将默认为true.


5、字面量

为了省事,可以直接在标签名之后写类名和ID名。例如:

div#contentp.lead.center| Pandora_galen#side-bar.pull-right  // 没有标签名,默认为“div”span.contact.span4a(href="/contact") 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"> contact me </a></span>
</div>

6、文本

使用“|”符号输出原始文本。

div | 我两年前开始学习前端| 在此之间,我学过了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.生成的是<style></style>


8、JavaScript代码

使用-=!=这三个符号在Jade中写可以操纵输出的可执行JS代码。这在要输出HTML元素和注入JavaScript时是很有用的。不过,这么做一定要小心避免跨站脚本(XSS)的攻击。

比如,可以使用!=定义一个array, 输出标签数据:

- var arr = ['<a>', '<b>', '<c>']
ul-for (var i = 0; i < arr.length; i++)lispan= ispan!= "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的一个主要的区别就是: Jade允许在代码里写几乎所有的JavaScript ; 但是,Handlebars则限制了开发人员只能使用少量的内置和自定义的helpers


9、注释

Jade的注释有两种:
<1>. 输出到页面的——“//”
<2>. 不输出到页面的—— “//-”

// 普通注释,会输出到渲染后生成的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.5if user.adminbutton(class = "launch") Launch Spacecraft
else button(class = "login") Log in

此外,还有unless, 它相当于不或者!。

注意: 每行的代码结尾处并没有分号“;”


11、each语句

在Jade里迭代很简单,只需要使用each语句就行了。

- var language = ['JavaScript', 'Node', 'Python', 'Java']
diveach value, index in languagep= 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 languagesp= key + ":" + value 

输出:

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

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 coinswhen 0p You have no moneywhen 1p You have a coindefaultp You have #{coins} coins!

14、Function mixin

如果你使用过sass又或者compass的mixin你肯定不会陌生,而Jade 里mixin的使用方法和它们基本相同。

声明的语法: mixin name(param, param2, …….)
调用: +name(data)

mixin row(items)treach item, index in itemstd= itemmixin table(tableData)tableeach 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其它文件的主文件里,我们决定要用什么。主文件会被首先处理(可以在主文件了定义数据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 headerp some default text
block contentp loading...
block footerp copyright

示例-2: 在文件file_b里:

extend file_a
block headerp very specific text
block content.main-content

Node.js模板引擎: Jade入门相关推荐

  1. JS模板引擎handlerbars入门

    handlebars   -- 前端的模板引擎 <!DOCTYPE html> <html lang="en"> <head><meta ...

  2. swig模板 PHP,nodejs前端模板引擎swig入门

    相对于jade,我还是更喜欢swig前端模板引擎,jade虽然语法简练高效了不少,但是在我这最大的问题是 他没有一个html该有的样子... 所以我还是决定使用swig,页面结构,样子都是熟悉的样子, ...

  3. php配合jade使用,详解基于模板引擎Jade的应用

    本文小编就为大家分享一篇基于模板引擎Jade的应用详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. 有用的符号: | 竖杠后的字符会被原样输出 · 点表示下一级 ...

  4. cms概述 。比较shopex和ecshop区别 。smarty模板引擎的入门

    cms概述 为了找到一个合适的cms网站系统,我花了一番功夫搜索了多种cms,包括我用过的和没用过的,知道的和不知道的,当然,必须是开源的.免费的.生成静态页面的.到各自的官方网站,查看了有关资料,下 ...

  5. js模板引擎art template数组渲染的方法

    转载:js模板引擎art template数组渲染的方法 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,模板引擎种类也是五花八门,我就说几个安全性高.错误处理调 ...

  6. js模板引擎 之handlebars.js

    最近在接触郑州知识库,里面使用到的技术是值得自己学习的. 该项目前端使用的是handlebars.js模板引擎框架.模板引擎框架用于数据与结构分离的思想,实现页面动态分离的效果. 1.为什么使用模板引 ...

  7. 解决laytpl.js模板引擎插件加载模板后无法获取模板中的元素id等内容

    一.问题描述 在页面中使用laytpl.js模板引擎,在页面加载后无法使用jquery获取模板中的html元素,以下是图片和代码: 在添加或修改完毕后重新加载页面,不能使用jquery获取模板中的ht ...

  8. JS模板引擎sychelTemplate

    sychelTemplate 简介 0.sychelTemplate希望创造一个用户觉得"简单好用"的JS模板引擎 注:等不及可以直接点左侧导航中的"C.使用举例&quo ...

  9. js模板引擎渐进--后记

    至此,算是完成了一个系列了. 本来是想写的更详细的,但是太详细每次说的东西就少的可怜. 在学习的过程中,每次的改进改动博主都是复制一个新的文件进行,整个有二十多篇,中间有很多小细节的东西,集中在 ea ...

最新文章

  1. 【React组件】写一个模仿蓝湖的图片查看器
  2. 安卓中radiobutton不进入监听事件_Laravel模型事件的实现原理详解
  3. msvc MinGW gcc g++关系
  4. MySQL集群中主从切换
  5. Centos 7 KVM安装win10
  6. php简单生成缩略图方法
  7. 将node.js程序作为服务,并在windows下开机自动启动(使用forever)
  8. pytest.5.参数化的Fixture
  9. 硝烟中的Scrum和XP-我们如何实施Scrum 4 (Part 1/2)
  10. 【操作系统 · 调度】多处理器 实时调度
  11. raw文件格式 Android,手机摄影知识讲堂:关于RAW格式的那些事
  12. html drag 例子,html5 drag事件用法
  13. hex,bin,elf,axf文件简介
  14. 阅读图像显著性检测论文三:Saliency Detection A Spectral Residual Approach
  15. extjs 中时间控件中 时分秒
  16. 2020国家网络安全宣传周,这些事和你有关
  17. PHP实现RSA算法
  18. 巴菲特午餐终局谜题何时揭晓,中标者是不是孙宇晨?
  19. win7 ie11 无法卸载
  20. 京信通信成功打造自动化工厂(MES应用案例)

热门文章

  1. 建模评价类问题 —— 模型解决方案
  2. 联想韦卫:商用云计算从用户需求开始
  3. 怎样针对Google做搜索引擎优化
  4. c++编码小技巧之函数返回时自动调用
  5. c++ cleartype_在Windows Vista中调整ClearType字体设置
  6. 《长三角区域大数据发展报告(2018)》在杭发布
  7. 项目上线那些事之Can't connect to X11 window server异常
  8. python--列表元素的判断及遍历(in/ not in)-
  9. Rapid SCADA MQTT
  10. 1.已知本原多项式,利用Matlb中的simulink构成m序列产生器。2.已知任意本原多项式,利用matlb软件编程求解其对应的m序列以及m序列产生过程。