开发后怎么使用小程序_详解Node.js模板引擎Jade入

阅读  ·  发布日期 2021-01-08 17:05  ·  admin
详解Node.js模板引擎Jade入门       这篇文章主要介绍了详解Node.js模板引擎Jade入门,Jade是Node.js的一个模板引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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", )
 a(href='login")
 button(type="submit", value="提交")

输出:

 div id="content" 
 a href='a 
 form action="/login" 
 button type="submit" value="提交" 
 /form 
 /div 

动态属性:

动态属性即属性的值是动态的,即用一个变量来表示属性的值。符号“|”可以在新的一行里写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名。例如:

div#content
 p.lead.center
 | Pandora_galen
 #side-bar.pull-right // 没有标签名,默认为“div”
 span.contact.span4
 a(href="/contact" rel="external nofollow" rel="external nofollow" ) contact me

渲染输出的HTML:

 div id="content" 
 Pandora_galen
 div id="side-bar" /div 
 span 
 a href="/contact" rel="external nofollow" rel="external nofollow" contact me /a 
 /span 
 /div 

6、文本

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

 | 我两年前开始学习前端
 | 在此之间,我学过了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 = "pre>

生成的代码:

 script 
 console.log("Hello world!");
 setTiemout(function() {
 window.location.href = "script 

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

8、JavaScript代码

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

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

- var arr = [' a ', ' b ', ' c ']
 -for (var i = 0; i arr.length; i++)
 span= i
 span!= "unescaped:" + arr[i] + "vs."
 span= "escaped:" + arr[i]

生成的代码如下:

 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 . 不输出到页面的—— “//-”

// 普通注释,会输出到渲染后生成的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 = ['JavaScript', 'Node', 'Python', 'Java']
 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]
 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、过滤器

过滤器的作用是: 用另一种语言来写一个文本块;

 :markdown
 # practical Node.js
 [This book](pre>

注意: 要想使用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

声明的语法: mixin name(param, param2, …….)

调用: +name(data)

mixin row(items)
 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 
 td express /td 
 /tr 
 td Jade /td 
 /tr 
 td Handlebars /td 
 /tr 
 /table 
 table 
 td backbone /td 
 /tr 
 td angular /td 
 /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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。