jade介绍、安装

jade是前后端都可以使用的模板引擎7

1、安装:

    sudo npm i -g jade


2、介绍

    元素标签不需要写<>

    子元素与父元素需要换行并tab缩进

    标签与文本需要使用空格来隔开


3、jade的缺点

    1)可移植性差

    2)调试困难

    3)性能一般

4、初始阶段开发效率,稳定性成和协作的成本

jade 头尾标签

<!DOCTYPE>
html
    head
        title ${title}

    body
        h1 标题内容

命令行编译jade文件

# jade index.jade         // 会将jade文件编译成同级目录的index.html文件,并且是没有代码格式的只有一行

# jade -P index.jade     // 有缩进,可读的格式

# jade -P -w index.jade // 侦听jade文件有变化执行转换的命令

小技巧: 在sublime中打开 index.jade 和 index.html文件, 选择view菜单 -> layout/ columns2 变成两列,将index.html放到另一列中,这样每次保存就可以看到html代码

属性文本和值

1、class和id

    div.row

    div#row

    div#row.column-samil    // id="row" class="column-samil"

    div.rowA.main        // class="rowA main"


2、属性

    a标签的href属性值,和自定义属性和值
    a(href="http://haha.com",
        title="jade",
            data-uid="siguang")

    input(name="course" type="check" checked)

混合的文本和标签

1、如果字符里有点进行处理

    // 不会把.aa解析成 class="aa" 并且换行,也能写html标签
    div.row
        p.
            1.aa <strong>这里字体加粗</string>
            2.bb
            3.cc 
            4.dd

    或者
    div.row
        p
            | 1.aa 
            | 2.bb
            | 3.cc 
            | 4.dd

注释和条件注释

1、单行注释 //

2、不可见的注释 //-

3、块注释        //- 在当前节点的开头

4、条件注释

    <!--[if IE 8]>
        <html class='ie8'>
    <![endif]>


    </html>        // 需要html



div.row
    // a(href="http://haha.com", title="siguang", data-index="1") 去主站

    //- input(name="course" type="check" checked)

div.row
//-
    p.
        1.aa <strong>这里字体加粗</string>
        2.bb
        3.cc 
        4.dd

变量声明

声明: - var course = 'jade'

获取: #{jade}

1、命令行下传值
    jade index.jade -P -w --obj '{"name":"siguang", age: 30}'

    div.row
        div.column-12
            姓名: #{name}

        div.column-12
            年龄: #{age}

2、通过json传值

    jade index.jade -P -O test.json

    test.json
    {
        'name': 'siguang',
        'age': 30
    }

转义

1、将html转成字符串输出

    - var data = '<script>alert(123)</script>'

    p #{data}


2、非转义

    - var data = '<script>alert(123)</script>'

    p !{data}

流程

1、if...else...

    - var isData = true
    if isData
        div 对象存在
    else
        对象不存在


2、case

    - var name = 'jade'
    case name
        when 'java'
            div java

        when 'jade'
            p hello jad



3、for 或 each 循环

    - var data = {'name': 'siguang', 'nage': 30}
    div.row
        - for(var key in data)
            div= key +'='+data[key]

    each()

mixin

相同结构的内容可以放到mixin中,相同一个函数

1、无参
    mixin 函数名        // 声明 
        p 这里是函数的块内容
        p 这里是函数的块内容
        p 这里是函数的块内容

    +函数名            // 调用

2、有参

    mixin 函数名(参数)
        each key in data
            li= data[key]

    +函数名({username: 'siguang', age: 30});

模板继承

代码复用

定义一个html的基本结构,内容只写到body中

public.jade

    DOCTYPE html
    html
        head

        body
            block desc
                p 内容继承
            block content    // 这里接收内容


main.jade

    // 通过extends继承到哪个 jade文件
    extends public

    block content        // 这里写到哪里
        div.row
            p aaaa
            p aaaa
            p aaaa

        div.row-b
            p bbb
            p bbb
            p bbb

include 引用

引用一个jade文件

DOCTYPE html
html
    head
        include head

    body
        include login

jade api

http的原声写法

1、jade.compile(source, 传值): 返回一个函数来生成html

2、jade.compileFile(path, 传值)

3、jade.compileClient(source, 传值)

4、jade.render(source, 传值):

5、jade.renderFile(jade文件, 传值):


compile()示例
    var http = require('http');
    var jade = require('jade');

    var server = http.createServer(function(req, res){
        res.writeHead(200, {'ContentType': 'text/html'});

        var fn = jade.compile('div #{course}', {});
        var html = fn({course: 'jade'});

        res.end(html);
    })

    server.listen('8081', 'localhost')


render()示例

    var http = require('http');
    var jade = require('jade');

    var server = http.createServer(function(req, res){
        res.writeHead(200, {'ContentType': 'text/html'});
        var html = jade.render('div #{course} #{name}', {course: 'jade', name: 'siguang'});
        res.end(html);
    })

    server.listen('8081', 'localhost')


{pretty:true} 如果不加此属性html会是压缩模式,加上格式化的代码

将html编译成jade文件

安装: sudo npm install html2jade -g

生成命令: html2jade ./public/index.html > index.jade

在node中转换

var html2jade = require('html2jade');

html2jade.convertDocument(document, {}, function(err, jade){
    console.log('反编译后的jade文件')
})


在线转换: http://html2jade.vida.io/

| 参考资料
| http://www.cnblogs.com/fullhouse/archive/2011/07/18/2109945.html
|
|