注:以下代码都没有做缩进处理···
安装
npm install -g jade
直接编译
jade index.jade
不压缩
jade -P index.jade
不压缩且监控
jade -P -w index.jade
语法:
h1.title(id=”title”,class=”title2”) //括号内一定要用这种写法,括号内一般都是html直接的写法
h1.title#title.title2
以上两种方法是一样的
标签中有大段的块内容
方式一:在标签后面添加 .
比如一段js代码,注意是script后面有一个.
script.
console.log(‘Welcome to join wandoujia-fe’)
console.log(‘We want you’)
方式二:每段前面添加|
script
| console.log(‘Welcome to join wandoujia-fe’)
| console.log(‘We want you’)
上边可以直接插入标签1,这个不会改变,会被浏览器解析
注释:
单行会编译成、 //h3
多行不会编译 //-h3
块注释 //-
h3
不换行嵌套
:
兼容ie
<!– [if IE 8]><html class=’ie8’><![endif]–>
<!– [if !IE]><!–><!–<![endif]–>
声明变量:
-var course = ‘jade’
title #{course}
//支持js 例如写成
title #{course.toUpperCase()}
输出大写
引入:
1.内嵌-权重最高
2-命令行可以在命令行控制变量,当同时存在的时候文档内嵌权重最高
3-也可以从外部json文件引入
jade index.jade -P -w -O test.json //通过test.json来输入
转义:
-var data=’test’
-var htmlData=’<script>aler-t(1)</script>’
p #{data} //test
p #{htmlData} // <会被转义
p !{htmlData} // <不会被转义
p=data //和#一样
p=htmlData //和#一样
p!=htmlData //和#一样
p \#{htmlData} //避免编译#{}
p \!{htmlData} //避免编译#{}
input (value=’#{newData}’) //当newData没有给赋值的时候,这里应该写成input (value=newData) 这样就不会初始一个undefined了
流程:
1、for
-var peng = {course:’jade’,level:’high’}
-for(var k in peng) //遍历peng
p= peng[k]; //显示jade 和high
2、each
-var peng = {course:’jade’,level:’high’}
-each value,key in peng //遍历peng
p #{key}:#{value} //显示course:jade level:high
数组遍历
-var courses=[‘node’,’jade’,’expess’]
-each item in courses
p= item
嵌套循环
-var sections=[{id:1,items:[‘a’,’b’]},{id:2,items:[‘c’,’d’]}]
dl
-each section in sections
dt= section.id
-each item in section.items
dd= item
显示结果
1ab2cd
while用法
-var n = 0
ul
while n<4
li= n++
if else用法
-var isPeng = true
-var lessons = [‘jade’,’node’]
if lessons
if lessons.length>2
p more than 2: #{lessons.join(‘,’)}
else if lessons.length>1
p more than 1: #{lessons.join(‘,’)}
else
p no lesson
else
p no lesson
unless用法–其实就是if的反向判断
unless !isPeng
p #{lessons.length} //2
switch语句(用case和when代替)
-var name = ‘jade’
case name
when ‘java’
when ‘node’
p Hi node!
when ‘jade’
p Hi jade!
when ‘express’: p Hi express! //这个和jade的结果一样,就是写法不同
default
p #{name}
mixin-其实就和function差不多
mixin lesson
p peng jade study
+lesson //这个是调用,不调用,不显示
传参
mixin study(name,courses)
p #{name} stydy
ul.courses
each course in courses
li=course
+study(‘tom’,[‘jade’,’node’])
嵌套(接上)
mixin group(student)
h4 #{student.name}
+study(student.name,student.courses)
+group({name:’tom’,courses:[‘jade’,’node’]})
显示结果:
tom stydy
- jade
- node
内敛代码块
mixin team(slogon)
h4 #{slogon}
if block
block
p 在上边 //自己测试下上边那个block就是指的下边那个p Gbod job,显示的也是这个,这是判断team内是否有元素
else
p no team
+team(‘slogon’)
p Gbod job!
可以传属性
mixin attr(name)
p(class!=attributes.class) #{name}
+attr(‘attr’)(class=’magic’)
显示结果:
attr
简单一点写法
mixin attrs(name)
p$attributes(attributes) #{name}
+attrs(‘attrs’)(class=’magic2’,id=’attrid’)
显示结果
attrs
当不确定传参个数的时候
mixin magic(name,…items)
ul(class=’#{name}’)
each item in items
li= item
+magic(‘magic’,’node’,’jade’)
显示结果
- node
- jade
继承(文件和文件共用)用的不多
block desc
p imooc jade study extends //定义
block desc //调用
block desc
引用文件
extend layout //这个layout是文件名,不是block的名,如果有层级关系,前边加/来寻址就行了
block content
被引用个文件
最下边写上
block content //这样引用才能接着写
如果在被引用文件内有
block desc
然后在引用文件内又定义了一次
block desc
那么引用文件内定义的新属性会覆盖掉被引用文件的属性
实例:
layout.jade
//继承-头部+尾部
doctype html
html(lang=”en”)
head
meta(charset=”UTF-8”)
body
block content
footer END
index.jade
//这个用的是继承方法
extends layout
block content
p 这里写内容
包含:文件和区块的内嵌关系
head.jade
//包含-头部
doctype html
html(lang=”en”)
head
meta(charset=”UTF-8”)
body
block content
footer.jade
//包含-尾部
footer END
index.jade
//这个用的是包含de方法
include head
p haha
include footer
render和renderFile
compile用法
var fn = jade.compile(‘div #{course}’,{})
var html = fn({course:’jade’})
res.end(html)
结果
jade
render方法
var html=jade.render(‘div #{course}’,{course:’jade’})
后边直接放入参数,结果和第一个相同
renderFile方法
var html=jade.renderFile(‘index.jade’,{course:’jade’},pretty:true)
pretty:true格式化
改文件头就可以改变显示形式 content-type:text/plain 把plain改成html