详解Node.js模板引擎Jade入门
Jade是Node.js的一个模板引擎,它借鉴了Haml的很多地方,所以语法上和Haml比较相近。并且,Jade也支持空格。
1、标签
在Jade里,一行开头的任何文本都被默认解释成HTML标签。并且你只需要你写开始标签——注意:不需要加“<>”。因为Jade会帮我们渲染闭合和开始标签。例如:
body
div
h1Jade是Node.js的一个模板引擎
p它借鉴了Haml的很多地方,所以语法上和Haml比较相近。
div
footer©Pandora
上面的Jade模板最终渲染出的HTML代码是:
Jade是Node.js的一个模板引擎
它借鉴了Haml的很多地方,所以语法上和Haml比较相近。
注意:如果没有写标签名,则默认就是div标签。
2、变量/数据
传给Jade模板的数据我们称之为locals。使用等号“=”来输出一个变量的值。
(locals):
{
title:"Express.jsGuide",
body:"TheComprehensiveBookonExpress.js"
}
Jadecode:
h1=title
p=body
渲染输出的HTML:
Express.jsGuide
TheComprehensiveBookonExpress.js
3、读取变量
Jade中读取变量的值是通过#{name}来实现的。例如:
-vartitle="Node"
pIlove#{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="提交")
输出:
CSDN:中国软件联盟
动态属性:
动态属性即属性的值是动态的,即用一个变量来表示属性的值。符号“|”可以在新的一行里写HTML节点内容。例如:
a(href=url,data-active=isActive)
label
input(type="checkbox",checked=isChecked)
|yes/no
提供给上面模板的数据:
{
url:"/logout",
isActive:true,
isChecked:false
}
最终渲染后输出的HTML:
注意:属性值为false的属性在输出HTML代码时将被忽略;而没有传入属性值时,将默认为true.
5、字面量
为了省事,可以直接在标签名之后写类名和ID名。例如:
div#content
p.lead.center
|Pandora_galen
#side-bar.pull-right//没有标签名,默认为“div”
span.contact.span4
a(href="/contact"rel="externalnofollow"rel="externalnofollow")contactme
渲染输出的HTML:
Pandora_galen
contactme
6、文本
使用“|”符号输出原始文本。
div
|我两年前开始学习前端
|在此之间,我学过了html,jQuery,JavaScript,Python,Css3,HTML5,Bootstrap,D3.js,SVG...而现在我在学Node。并且我已经深深的爱上了前端。
7、Script和Style块
使用“.”符号在HTML里创建
script.
console.log("Helloworld!");
setTiemout(function(){
window.location.href="http://csdn.net"
},1000);
console.log("Goodbye!");
生成的代码:
同理,style.生成的是。
8、JavaScript代码
使用-,=或!=这三个符号在Jade中写可以操纵输出的可执行JS代码。这在要输出HTML元素和注入JavaScript时是很有用的。不过,这么做一定要小心避免跨站脚本(XSS)的攻击。
比如,可以使用!=定义一个array,输出标签数据:
-vararr=['','','']
ul
-for(vari=0;i
生成的代码如下:
- 0unescaped:vs.escaped:<a>
- 1unescaped:vs.escaped:<b>
- 2unescaped:vs.escaped:<c>
模板引擎Jade和Handlebars的一个主要的区别就是:Jade允许在代码里写几乎所有的JavaScript;但是,Handlebars则限制了开发人员只能使用少量的内置和自定义的helpers。
9、注释
Jade的注释有两种:
<1>.输出到页面的——“//”
<2>.不输出到页面的——“//-”
//普通注释,会输出到渲染后生成的HTML页面
pHelloJadecontent
//-特殊注释,不会输出到HTML页面
p(id="footer")copyright2016
输出:
HelloJadecontent
copyright2016
10、if语句
给if语句加个前缀-,这样就可以写标准的JavaScript代码了;也可以不用前缀、不用括号,当然后者更简洁。
-varuser={}
-user.admin=Math.random()>0.5
ifuser.admin
button(class="launch")LaunchSpacecraft
else
button(class="login")Login
此外,还有unless,它相当于不或者!。
注意:每行的代码结尾处并没有分号“;”
11、each语句
在Jade里迭代很简单,只需要使用each语句就行了。
-varlanguage=['JavaScript','Node','Python','Java']
div
eachvalue,indexinlanguage
p=index+","+value
输出:
0.JavaScript
1.Node
2.Python
3.Java
示例2:
-varlanguage=['JavaScript':-1,'Node':2,'Python':3,'Java':1]
div
eachvalue,keyinlanguages
p=key+":"+value
输出:
JavaScript:-1
Node:2
Python:3
Java:1
12、过滤器
过滤器的作用是:用另一种语言来写一个文本块;
p
:markdown
#practicalNode.js
[Thisbook](http://csdn.net)reallyhelpstograspmanycoponentsneededformodern-daywebdevelopment.
注意:要想使用Markdown过滤器,需要安装Markdown模块,以及Marked和MarkdownNPM包。
13、case
-varcoins=Math.round(Math.random()*10)
casecoins
when0
pYouhavenomoney
when1
pYouhaveacoin
default
pYouhave#{coins}coins!
14、Functionmixin
如果你使用过sass又或者compass的mixin你肯定不会陌生,而Jade里mixin的使用方法和它们基本相同。
声明的语法:mixinname(param,param2,…….)
调用:+name(data)
mixinrow(items)
tr
eachitem,indexinitems
td=item
mixintable(tableData)
table
eachrow,indexintableData
+row(row)
-varnode=[{name:"express"},{name:"Jade"},{name:"Handlebars"}]
+table(node)
-varjs=[{name:'backbone'},{name:'angular'},{name:"emberJS"}]
+table(js)
输出:
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是一种自底向上的方法。它所包含的文件决定它要替换主文件中哪那一部分。
使用格式:extendfilename和blockblockname;
示例-1:在文件file_a里:
blockheader
psomedefaulttext
blockcontent
ploading...
blockfooter
pcopyright
示例-2:在文件file_b里:
extendfile_a
blockheader
pveryspecifictext
blockcontent
.main-content
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。