模板引擎——Jade学习笔记

本文是关于Jade模板引擎的学习笔记,详细介绍了其语法特性,包括标签的使用方式,如id和class的直接指定,div的特殊性,属性添加方式,以及元素嵌套规则。此外,还讲解了{}、!{}、=、!=的安全转义和非转义规则,以及如何处理未定义变量的情况。
目录
一、Jade基础语法知识
1、文档声明和头尾标签
2、实现命令行实时编译
3、标签语法
4、属性文本和值
5、混合的成段文本和标签
6、注释与条件注释
7、变量声明和数据传递
8、安全转义与非转义
9、流程代码之遍历—— for in、each、while
10、流程代码之条件判断—— if else、unless、case when
11、神奇的mixins
二、Jade进级
1、模板的继承
2、模板的包含
3、render及renderFile方法
4、过滤器filter
5、runtime环境下使用jade
6、利用html2jade反编译
三、Jade缺点及如何取舍
-------------------------------------------------------------------------------------------------
安装Jade
npm install -g jade
编译Jade文件
jade ××.jade

一、Jade基础语法知识

1、文档声明和头尾标签
新建一个文件夹,在文件夹下新建index.jade文件

2、实现命令行实时编译
$ jade index.jade

$ jade -P index.jade (格式化输出,其中P是大写)

$ jade -P -w index.jade (其中w是小写)
每次更改index.jade文件并保存后,jade会 自动将其编译为index.html文件

3、标签语法
标签不用写 尖括号,也 不用闭合,只需要保持 正确的缩进即可,缩进可以用空格实现,也可以用tab实现,但是不能二者混用。

4、属性文本和值
  • 标签名后通过空格,来隔离标签内的内容
  • id与class特殊,可直接跟在标签名后面,类似css写法
  • div是特殊标签,可不写标签名(默认div)
  • 其他属性通过括号(key='value')的形式添加
  • 通过缩进的方式来添加一个元素内的子元素(标签)
编译后结果


5、混合的成段文本和标签
1、如果一个标签内包含 大段文本,而这段文本可能有 换行,怎么处理?

在p标签后紧跟’ .‘,然后换行写大段的文本内容,编译结果如下:

2、如果文本与子元素 混合呢?
方法一。加’ .‘,直接写标签

方法二。去掉’ .‘,文本前加’ |

方法三。去掉’ .‘,文本前加’ |‘,子标签用jade语法

编译结果(不同方法得到的格式可能有所不同,但结构一样)

6、注释与条件注释。
// 注释后html会保留注释,而 //- 不保留,且通过 换行与缩进 ,可实现块注释

如果我想在 不同IE版本下使用不同的html代码怎么做?
条件注释

后面不要忘了加 </html>

7、变量声明和数据传递
三种 方式实现:
1、可以直接在 index.jade文件中声明变量并调用:

相比后面两种方式,jade文件中定义的 变量优先级最高
2、直接从 命令行传入变量

3、定义一个存放变量的 json文件,并通过命令传入

执行命令(其中 O是大写,传入json文件中变量)


8、安全转义与非转义

  • {}安全转义
  • !{} 非转义,script标签内代码会执行
  • = 安全转义
  • != 非转义
  • 如果需要在页面中输出#{}、!{}这种字符,需要通过反斜杠\转义
  • 65行调用的data是未定义的,与67行的区别是,如果该变量没有定义,65行会编译成'undefined'
  • 69行作为非属性值调用,未定义的data变量也不会变成’undefined‘。

9、流程代码之遍历—— for in、each、while


10、流程代码之条件判断——if elseunlesscase-when
(unless 相当于 if not


11、神奇的mixins
基础用法

嵌套的mixin

内联代码块

其中 block是关键字,如果在调用mixin时,后面跟了子元素代码块,调用后,该代码块将 替换定义中的block
传递属性

编译结果

传递不定项参数



二、Jade进级

1、模板的继承
Jade可以通过 block+ extends实现模板继承
block用法

上面第1个block用于 定义模板,后面2个是 调用,定义与调用都产生代码,且相同
extends用法
我们新建一个文件,命名为 layout.jade

在新建一个 index2.jade来继承layout.jade。通过extends实现继承,后缀名可以带也可以不带,不用引号,如果layout.jade与index2.jade不在同一文件夹下,那么可以通过相对路径来实现继承。

其实这 类似于语言的继承,比如 Java。layout.jade文件是父类(确切来说是抽象类),并且声明了content这个block(类似于java中的抽象方法),index.jade是子类,在这个子类中我们完成了对block content的声明。
编译结果:

----------------
在layout.jade(父类文件)中定义的block会被index2.jade(子类文件)种定义的同名block 覆盖掉,如下,这个也类似于Java中父子类方法的覆盖。


2、模板的包含
通过 include关键字实现模板的包含,或者说对其他文件进行引入。
新建 content.jadecontent2.html文件:



index2.jade文件中通过 include关键字引入,jade文件可以不带后缀名,html文件要带

编译结果


3、render及renderFile方法

jade api(左边是 options 参数中的配置项

以上各api是用来 编译jade代码语句或者 jade文件的。下面主要讲解3个api调用方法:
① 先在当前项目目录下执行命令
$ npm install jade
② 在项目目录下新建 server.js文件,该文件创建了一个server,监听8080端口。

为测试单个api,可先把其他2个注释掉看效果。通过renderFile编译后的文件,与通过命令行编译jade文件的效果一样。
执行命令: $ node server,在浏览器中输入localhost:8080,便可看到编译后的结果,当然,是html标签经过浏览器解析后呈现的效果。

4、过滤器filter
Jade中的filter即插件,可以让我们使用其他风格的语法编写代码。如用 markdown文件语法编写文本;用 less语法写css,用 coffeescript语法写JavaScript。
①首先安装全局filter插件:

②后来运行时提示我安装的jade版本比2.0.0低(是由于改名的原因吧。。。),所以提示我安装以下模块:

③然后我们就可以使用其他语法编写jade代码了

编译后结果


5、runtime环境下使用jade
这小节没做笔记,课程地址: https://www.imooc.com/video/5279

6、利用html2jade反编译


三、Jade缺点及如何取舍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值