详解Node.js模板引擎Jade入门

前端之家收集整理的这篇文章主要介绍了详解Node.js模板引擎Jade入门前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1、标签

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

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

Jade是Node.js的一个模板引擎

它借鉴了Haml的很多地方,所以语法上和Haml比较相近。

© Pandora

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

2、变量/数据

传给Jade模板的数据我们称之为locals。 使用等号“=”来输出一个变量的值。

(locals):

Jade code :

渲染输出的HTML :

Express.js Guide

The Comprehensive Book on Express.js

3、读取变量

Jade中读取变量的值是通过#{name}来实现的。例如:

p I love #{title}

在模板被编译时变量的值就会被处理,所以,不要在可执行JavaScript(-)里使用它。

4、属性

属性紧跟在标签之后,且用“()”括起来,多属性用“,”分隔。例如:body (name1 = “value1”,name2 = “value2”)。

输出

动态属性

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

Box",checked=isChecked) | yes / no

提供给上面模板的数据:

logout",isActive: true,isChecked: false }

最终渲染后输出的HTML:

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

5、字面量

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

渲染输出的HTML:

contact me

6、文本

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

7、Script 和 Style块

使用“.”符号在HTML里创建

console.log("Good bye!");

生成代码

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

console.log("Good bye!");

同理,style.生成的是

8、JavaScript代码

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

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

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

生成代码如下:

  • 0unescaped: vs. escaped: @H_403_145@
  • 1unescaped: vs. escaped: @H_403_145@
  • 2unescaped: vs. escaped: @H_403_145@
  • 模板引擎Jade和Handlebars的一个主要的区别就是: Jade允许在代码里写几乎所有的JavaScript ; 但是,Handlebars则限制了开发人员只能使用少量的内置和自定义的helpers。

    9、注释

    Jade的注释有两种:

    <1>. 输出页面的——“//” <2>. 不输出页面的—— “//-”

    输出到渲染后生成的HTML页面 p Hello Jade content

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

    输出

    Hello Jade content

    <p id="footer">copyright 2016

    10、if 语句

    给if语句加个前缀-,这样就可以写标准的JavaScript代码了; 也可以不用前缀、不用括号,当然后者更简洁。

    0.5

    if user.admin
    button(class = "launch") Launch Spacecraft
    else
    button(class = "login") Log in

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

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

    11、each语句

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

    输出

    0. JavaScript

    1. Node

    2. Python

    3. Java

    示例2:

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

    输出

    JavaScript: -1

    Node: 2

    Python: 3

    Java: 1

    12、过滤器

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

    注意: 要想使用Markdown过滤器,需要安装Markdown模块,以及Marked和Markdown NPM包。

    13、case

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

    注意: 这里不用给模板名以及路径添加双引号或者单引号。

    再例如,从父目录开始查找:

    注意:不能再文件名和文件路径中使用变量,因为includes/partials是在编译时处理的,而不是在执行时。

    对于使用Sass、Compass又或者Less的人这些事再熟悉不过的了。

    16、extend

    extend与include“唱对台戏”,正好相反,extend是一种自底向上的方法。它所包含的文件决定它要替换主文件中哪那一部分。

    使用格式: extend filename 和 block blockname;

    示例-1: 在文件file_a里:

    示例-2: 在文件file_b里:

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

    猜你在找的Node.js相关文章