推荐网站:

     node的模板常用的有两个,一个是ejs,另外一个就是jade,相对来说,ejs更容易理解,像原生的html,很多模板都是类似的,但要写的会比较复杂一些。 而jade的好处是更简洁,比如不使用<>之类的标签,而是用缩进,需要运行的js代码之前只有 - 即可,而不需要像ejs的<%  %>麻烦,如果要比较的话,可以看到jade和python是类似的,都是追求简洁的模范。

在Express中调用jade模板引擎

var express = require('express');
var app = express();
app.set('views', __dirname);
app.set('view engine', 'jade');
app.get('/', function (req, res) {
res.render('index');
});
app.listen(3000, function () {
console.log("Server is running at localhost:3000");
});

在当前目录下建立jade文件,

doctype html
html
head
title 朱振伟
body
h1 hello

这样在访问3000端口时就可以成功地渲染到页面上了。

标签

  在jade中声明文档类型只需要是下面这种简洁的形式:

doctype html

  

  在jade中创建一个列表,只需要是下面的形式:

ul
li Item
li Item
li Item

  即不需要使用<>来包含标签,不需要闭合标签,不需要配对。 但是,正确的缩进是非常必要的。

建议统一使用4个空格作为缩进标准。当然,只要缩进也是对的。

 

注释

  在jade中注释分为单行注释和多行注释,并且每种注释又分为在编译后显示注释和不显示注释。下面分别说明

单行注释:(在生成的html中不显示)

doctype html
html
head
title 朱振伟
body
h1 hello
// 这是一行注释,它会输出到html代码中
p 西安交通大学


页面中的显示如下:

单行注释:(不显示在html代码中)

doctype html
html
head
title 朱振伟
body
h1 hello
//- 这是一行注释,它不会输出到html代码中
p 西安交通大学


html代码如下:

可以看到,是否输出的区别仅仅在于是否有 - 。

多行注释: (输出到html中)

doctype html
html
head
title 朱振伟
body
h1 hello
//
这是多行注释,它不会输出到html代码中
多行注释要保持同样的缩进
再来一行
p 西安交通大学

多行注释:(不输出到html中)

doctype html
html
head
title 朱振伟
body
h1 hello
//-
这是多行注释,它不会输出到html代码中
多行注释要保持同样的缩进
再来一行
p 西安交通大学

同样,区别仅在于是否有 - 。

属性

下面是属性最常用的方法,多个属性之间使用逗号隔开。

doctype html
html
head
title 朱振伟
body
h1 hello
input(type="text",placeholder="search",id="search")

由于class和id是非常常用的属性,所以jade使用sublime中Emmet的用法。

doctype html
html
head
title 朱振伟
body
div.header
h2#title.font-bigger hello
p#content.font-big hello,world

html如下:

文本

单行文本 - 直接在标签后面添加文字

管道文本 - 换行后添加|符号。

多行文本 - 在标签后添加 . 然后换行

doctype html
html
head
title 朱振伟
body
p 这是单行文本
p
| 这是管道文本
| 这是管道文本
| 这是管道文本
p.
这是多行文本
这是多行文本
这是多行文本
p
这不符合要求
这不符合要求
这不符合要求

效果如下:

但是在后台我们可以看到最后的p是不符合要求的,会报错:

js代码(变量)

- 位于句首,只会在后台执行代码,而不会显示

#{}  会将变量等显示出来

= 会将变量显示,对特殊字符转义

!= 会将变量显示,对特殊字符也不会转义

doctype html
html
head
title 朱振伟
body
- var name = "<JohnZhu>";
p #{name}
h2= name
h3!= name

最终输出如下:

条件语句

doctype html
html
head
title 朱振伟
body
- var name = "JohnZhu";
- if (name == "JohnZhu")
h2 你的名字 --- JohnZhu
- else
h2 你的名字?你的名字?

最终在页面渲染的是 你的名字 --- JohnZhu

分支语句

doctype html
html
head
title 朱振伟
body
- var name = "JohnZhu";
case name
when "JohnZhu"
p JohnZhu
when "htt"
p htt
default
p it is default

最后显示的是 JohnZhu

循环语句

doctype html
html
head
title 朱振伟
body
- var array = [, , ];
ul
-for (var i = ; i < array.length; i++) {
li hello #{array[i]}
-}

即使用 - 之后只会在服务器端运行,而不会渲染,最终的输出如下所示:

doctype html
html
head
title 朱振伟
body
- var arr = ["hello", "hi", "morning"], n = ;
ul
while n < arr.length
li= arr[n++]

最终的输出如下:

可以看出while的特殊之处在于它并没有在前面使用 - ,否则会出错。

遍历语句

doctype html
html
head
title 朱振伟
body
- var arr = [, , ];
- for value, index in arr
p= value + " " + index

运行结果如下:

Mixins

doctype html
html
head
title 朱振伟
body
mixin list
ul
li foo
li bar
li foo_bar +list
+list

最终的html如下:

当然,这是最简单的混合宏。 更加使用的是使用参数传递 。

doctype html
html
head
title 朱振伟
body
mixin list(name)
li.pet= name ul
+list('dog')
+list('cat')
+list('pig')

(注意:只要是使用MIXINS, 就必须使用 + 来调用)

效果如下:

此外,还可以使用 ... 来表示数量不定的参数。

doctype html
html
head
title 朱振伟
body
mixin list(name,...items)
li.pet= name
- each item in items
li.pet= item ul
+list('dog',"","yellow")
+list('cat',"","blue")
+list('pig',"","orange")

即使用...代表未知的参数,使用items表示这些位置参数的集合, 然后利用jade中的each方法来遍历其中的每一个参数即可。

includes

  实现高度复用的一种方式就是将代码片段保存在不同的文件中,当我们需要的时候时候include引入即可。

  如: header.jade中的内容如下:

head
title 这一部分是通过include得到的

  footer.jade中的内容如下:

div.footer 这是footer, 这是通过include得到的。

  index.jade中的内容如下:

doctype html
html
include ./header.jade
body
mixin list(name,...items)
li.pet= name
- each item in items
li.pet= item ul
+list('dog',"","yellow")
+list('cat',"","blue")
+list('pig',"","orange")
include ./footer.jade

  在index.jade中,通过include即可将其他文件的代码引入,达到组合使用的目的。

继承

  jade使用extends来继承代码,与include纯粹的引用不同,extends可以修改代码。其中,现在layout.jade中设置block + 名称, 其中block是关键字。layout.jade如下所示:

doctype html
html
head
title MYJADE
body
block content

  index.jade继承了layout.jade,内容如下:

extends ./layout.jade

block content
p 这是通过extends得到的。
h4 通过关键词block和名称就可以定义、改写原来的内容

  

  

除了上面的继承方式,我们还可以通过prepend和append来决定添加的位置。

如layout.jade的内容如下:

doctype html
html
head
title MYJADE
body
block content
p 这是body下的内容

index.jade的内容如下:

extends ./layout.jade

block prepend content
p 这是通过extends得到的。
h4 通过关键词block和名称就可以定义、改写原来的内容

最终得到的效果如下:

如果说我们需要将index.jade的内容放在最后,使用append即可。

结束

jade 入门的更多相关文章

  1. Jade入门学习笔记

    jade是超高性能的node JavaScript模板引擎,有着非常强大的API和大量杰出的特性.它主要针对node的服务端.由于商标的原因,改为Pug,哈巴狗.Pug有它本身的缺点--可移植性差,调 ...

  2. node.js入门及express.js框架

    node.js介绍 javascript原本只是用来处理前端,Node使得javascript编写服务端程序成为可能.于是前端开发者也可以借此轻松进入后端开发领域.Node是基于Google的V8引擎 ...

  3. cola-ui的使用

    [toc] > 官方:[http://www.cola-ui.com](http://www.cola-ui.com) > > 教程位置:[http://www.cola-ui.co ...

  4. 【nodejs】jade模板入门

    使用jetbrians webstom创建空项目 1.创建package.json 引用依赖配置 { "name": "demojade", "des ...

  5. JADE平台入门

    相关介绍: JADE(Java Agent Development Framework,Java智能体开发框架) 用途: Java智能体开发框架 开发者: TILAB 主要功能: AMS.DF.ACC ...

  6. Express 教程 01 - 入门教程之经典的Hello World

    目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...

  7. Laravel5.0学习--01 入门

    本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...

  8. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  9. 1.Express入门

    Express提供了轻量级框架,把Node.js的http模块功能封装在接口中. 也扩展了http模块功能,处理服务器路由,响应,cookie和HTTP请求的状态. 实现Express充当服务器,设计 ...

随机推荐

  1. Boot Option Menu

    SATA HDD:TOSHIBA MQ02ABF100    1000G SATA HDD:SAMSUNG MZVLW512HMJP-000L2   => Invalid Partition T ...

  2. Web信息架构:设计大型网站(第3版) [美]Peter Morville 中文PDF扫描版

    新版Web信息架构设计大型网站针对新技术做了全面更新——搭配新颖范例.全新场景及最佳实践信息——但是,其焦点依然放在基础原理上.其结构严谨,图文并貌,内容涵盖了信息架构基本原理和实践应用的方方面面. ...

  3. DefaultHttpClient 在oppo A57手机上网络请求报错

    使用的库是xutils2.6.14,oppo A57 上调试的时候,请求接口时报错,但是其他手机都正常: com.lidroid.xutils.exception.HttpException: jav ...

  4. Java 在本地开发环境部署多个 spring 项目

    修改Tomcat 的 server.xml 文件 路径:C:\JAVA\apache_tomcat_8.5.11\conf\server.xml : 每个web项目的端口号不同,且存储的目录相同但是文 ...

  5. 写RestApi需要注意些什么?

    PS1="\n[\e[32;1m]([\e[37;1m]\u[\e[32;1m])-([\e[37;1m]jobs:\j[\e[32;1m])-([\e[37;1m]\w[\e[32;1m] ...

  6. 容器编排之Kubernetes1.10.2安装与配置

    k8s 1.10.2 https搭建文档 1.下载k8s镜像 方式一:docker hub + github,需要创建一个docker hub账户,连接指定的github账户,docker hub会从 ...

  7. 安卓--ListView

    实验目的: 学习使用ListView 实验要求: 实现一个列表,其中显示班级学号姓名,提供添加功能,如需要删去某一项,长按该项,通过弹出菜单显示删除功能. package com.flyuz.app3 ...

  8. 拖放(Drag和Drop)--html5

    拖放,就是抓取一个对象后拖放到另一个位置.很常用的一个功能,在还没有html5的时候,我们实现这个功能,通常会用大量的js代码,再利用mousemove,mouseup等鼠标事件来实现,总的来说比较麻 ...

  9. c语言参考书籍

    很惭愧没能把c++学的很好,毕竟离开始工作只有2年时间,对自己要求不要过高,慢慢来吧.话说知道自己的不足,以后要更加抓紧了!fighting~ 现在计划着把c语言给学习一下了,当然这次指的是深入地学习 ...

  10. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

    智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...