jade学习笔记

  • 编译
    • jade index.jade,得到压缩后的代码(也就是没有空格)
    • jade -P index.jade,得到格式化的代码,缩进都正常
    • jade -P -w index.jade,对jade文件实时编译,就不用改一次然后命令行敲一次了,直接自动编译
  • 一个最简单的jade
doctype html
html
  meta(charset="utf-8")
  head
    title meng
  body
    h1 jade
  • 标签语法
    • class h1.classname
    • id h1#idname
    • class + id div.classname#idname可以连着写,顺序无所谓
    • div,很特殊如果直接写#id,前面不写div标签名,自动生成一个id=id的div
    • 属性写法a(class='title',href='http://imooc.com'),类和id也可以这样写在括号里面,注意逗号分隔。
    • 大段纯文本
    p.  #这个点必须紧紧跟着p,表示下面的是一个
      wenben
      weben
      wenben
    p  #这叫管道文本
     |weneb
     |wene
    
    • 带标签的大段文本
    p.
      wenbwne
      <strong>wenwbe</strong> #直接写标签名
    或者
    p 
     | dss
     strong asdf #竖线的话元素不用写尖括号
     | dsdfsf
    
  • 注释
    • 单行注释,直接在前面加//
    • 非缓冲注释,完全不会被编译到html代码中//-
    • 块注释,也是//-或者//
  • 写样式
style.
   body{color:red}
  • 写js代码
script.
  var i = 0
或者
- var i = 'hello'
- for (var k in value)等等

  • 声明变量和替换
    • 第一种方式(写在页面里)
- var course = 'jade' #把变量声明在页面里
#这样course就可以在整个文档中被访问了
#使用的时候#{course}就代表jade这个字符串了
#并且可以用js方法,#{course.toUpperCase()},将字符串变成大写
  • 第二种方式(写在命令行)
#命令行里面也可以传一个变量
jade index.jade -P -w --obj'{"course":"jade"}' #注意语法

当前文档里声明的变量优先级比命令行传的变量高

  • 第三种方式(写在json文件里)(命令行升级版)
json文件,index.json
{
  "course":"jade"
}
命令行
jade index.jade -P -w -O index.json
  • 插入一个值(转义)
#什么时候会转义,比如说要写一个script标签放在一个变量里
- var htmlData = '<script>alert(1)</script>'这样尖括号就会被转义成&lt
  • 非转义 p !{htmlData} p后面必须有空格这样尖括号还是尖括号,并且等同于p!= htmlData p后面紧跟,不能有空格
  • 安全转义 p #{htmlData}常规引入变量,尖括号会被转义,并且等同于p= htmlData
  • tip 如果要输出!和#,就得转义\! \#
  • 存在一种特殊情况,当值不存在或者未定义的时候,那么就不用写#{}input(value=newData),这样newData不论有没有值,都可以,没有值就相当于没有,不会显示undefined

  • 代码嵌入总结
    • -,eg- for (var x=0;x<3 x ++)
    • =,
    p
      = 'This is <p>' #特殊字符会被转义,也就是尖括号
    
    • !=,特殊字符不会被转义

  • 流程代码
    • for each遍历
    - var course = {course:"jade",level:"high"}
    - for (var k in course)
      p= course[k] #这样就被直接执行了
    
    • each遍历,数组,对象都可以
    each value in arr
      p= value
    
    • 选择case
    case friends
      when 0
      when 1
      default
          p balalala
    
    • while循环
    while n < 4
      li= n++
    
    • 选择if ...else if ... else
    - var user = { description: 'foo bar baz' }
    - var authorised = false
    #user
      if user.description
        h2 Description
        p.description= user.description
      else if authorised
        h2 Description
        p.description.
          User has no description,
          why not add one...
      else
        h1 Description
        p.description User has no description
    
    还有unless语句,不符合才执行
    -var con = flas
    unless con
      p Hello,world#结果会生成p标签
    

  • mixins,需要用+标识符使用
mixin list
  ul
      li foo
      li bar
      li baz
+list
+list

带参数的混合宏

mixin pet(name)
  li.pet= name
ul
  +pet('cat')
  +pet('dog')

...表示不定数量的参数

mixin list(id,...items)
  ul(id=id)
      each item in items
          li= item
+list('mylist',1,2,3,4)

  • includes,实现高度复用,将代码片段保存在不同的文件中,需要哪个,导入哪个
#在需要的地方写includes
html
  ./includes/head.jade

  • extends,实现继承,继承与复用的区别在于继承可以修改代码,而复用是原原本本的代码
    • 使用block标识符,设置一个可修改代码片段,紧跟block后面的是该代码片段的名字
    block codename
        title Default title
    

  • Mixins,制造可重复使用的代码段
    • 没有变量的mixins
     //语法
    mixin list
      ul
          li foo
          li bar
          li baz
    //使用
    +list 即可
    
    • 传入变量的mixins
    mixin pet(name)
      li.pet = name
    //使用
    ul
      +pet('cat')
    
    • 更复杂的mixins
    mixin article(title)
      .article
          .article-wrapper
              h1 = title
              if block
                  blcok //存放可变的代码块
              else
                  p no content
     //使用
     +article("hello")
     或者
     +article("hello block")
      p this is my block
    
    • mixins传入的变量也可以用“rest arguments”语法
    mixin list(id,...items)
      ul(id=id)
          each item in items
              li= item
    //使用
    +list('my-list',1,2,3,4)
    

  • 坑坑坑!
    • 用webstorm有时正常有时报错空格和tab不能混合用,解决办法:webstorm->preference->code style->jade->Tabs and Indents->勾选use tab charactor就行了!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Jade和Sass一样通过空格来控制格式,一般推荐使用tab(2个空格键大小)来进行缩进。 一.Jade 小技巧 ...
    JamesSawyer阅读 5,390评论 7 2
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,070评论 0 7
  • 笔记来自慕课网的js和《JavaScript DOM编程艺术》一书以及《JavaScript权威指南》一书的学习。...
    恰皮阅读 715评论 3 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 世人总说,读史使人明智,使人知兴替、明得失。而我们读的历史,就是它的全貌、它的全然吗?如果说从教科书、畅销书、研究...
    她时线阅读 672评论 0 4