学习篇:NodeJS中的模板引擎:jade
NodeJS 模板引擎作用:生成页面
在node常用的模板引擎一般是
1、jade ——破坏式的、侵入式、强依赖(对原有的html体系不友好,走自己的一套体系)
2、ejs ——温和的、非侵入式的、弱依赖
本次就汇总一下jade的一些特性和使用方法。
一、Jade
在node中,jade的编写特性有:
1、根据缩进,来划分规定层级
例如:在原始目录下建立一个views目录,来存放该 test.jade
html
head
script
style
body
在node.js中来调用该jade(记得先用npm install jade)
const jade = require('jade') ;
var str = jade.renderFile('./views/test.jade' ,{pretty : true }) //pretty : ture 相当于beauty格式化一下输出的代码
console.log(str)
运行一下,log输出的语句便成了
<html>
<head>
<script></script>
<style></style>
</head>
<body>
</body>
</html>
可以看到在nodejs中的jade模板引擎,是根据缩进输入的情况,来划分规定层级的。
当然,如果你想把该代码输出成一个html文件,我们可以在源目录下新建一个build目录来存放生成的文件
那就将刚才的node.js改成
const jade = require('jade');//加载jade引擎
const fs = require('fs')
var str = jade.renderFile('./views/test.jade' ,{pretty : true }); //pretty : ture 相当于beauty格式化一下输出的代码
fs.writeFile('./buuld/index.html' ,str , function(err){
if (err)
console.log("编译失败");
else
console.log("编译成功");
})
执行完毕会在build目录下生成index.html
以上就是jade初级的使用方法。
但是我们使用模板引擎的目的并不是再此,还是能够添加css/js/data等数据。
2、关于class/style的写法——属性放在()里面,用逗号分隔
如:
html
head
script
style
body
div(class=['aaa','bbb','ccc'])
//class也可以写成div(style="aaa bbb ccc")
div(style={width:'200px' ,height:'300px' ,background:'red'})
//style也可以写成div(style="width:200px;xxxx")
运行一下node.js,则输出结果为
<html>
<head>
<script></script>
<style></style>
</head>
<body>
<div class="aaa bbb ccc">
<div style="width:200px;height:300px;background:red"></div>
</body>
</html>
关于上方输出格式,可以发现,style是可以用json传输的,class是可以采用数组传输进去的。
因此可以在node.js中直接插入相关属性数据,然后在jade文件调用,这样就可以很方便的生成不同框架的模板文件
如果你想插入相关属性数据,并调用的话,应当在node.js中的 jade.renderFile中如此添加数据
/
var str = jade.renderFile('./views/test.jade' ,{pretty : true ,
arr:['aaa' ,'bbb' ,'ccc'], cls:{width :'200px' , height:'200px' , background :'red'}
});
并在test.jade文件中修改如下:
html
head
script
style
body
div(class=arr)
div(style=cls})
运行一下,结果是跟刚才的相同
3、在jade标签中输入数据时,记得在相应标签后,加一个空格
我们通常前端编程的时候,一般都会写到
<div>名称:DobTink</div> //在标签内添加“名称:”之类的数据
<div>年龄:15</div>
<script src='a.js'></script>
<script> //或者在jade中编写JavaScript
window.onload = function(){
console.log('测试输出');
}
</script>
<a href="http://www.dobtink.com">首页</a> //编写a标签、img标签给其src赋予属性
///等等
而在jade中,我们需要这样来写
div 名称:DobTink
div 年龄:15
script(src='a.js' ,xx = '')
script. //注意在script后面加个点"."
window.onload = function(){
console.log('测试输出');
}
a(href="http://www.dobtink.com") 首页
执行一下,便如上所示。
4、在jade中使用if else switch while 等语句
有些情况下,我们需要从后天拿取数据,并对数据在jade中进行数据处理操作,而在jade中的 这些语句还是很方便地
代码如下:
4.1 、jade中的 if 使用
html
head
body
-var a = 15;
-if(a%2==0)
div(style={background:'red'}) 偶数
-else
div(style={background:'green'}) 奇数
4.2 、jade中的 switch 使用
html
head
body
-var a = 3;
case a
when 0
div aaa
when 1
div bbb
when 2
div ccc
when 3
div ddd
default
|默认
在jade中,switch是不存在的,被转义成了case,使用方法跟switch一致。
在该段代码中 “|”符号,是直接输出后面数据, "-"号之后的语句,jade会默认为是逻辑执行代码语句,之后的语句它并不会要求每行都需要添加"-"符号。
来源:https://segmentfault.com/a/1190000016281552
学习篇:NodeJS中的模板引擎:jade的更多相关文章
- nodejs学习(二) ---- express中使用模板引擎jade
系列教程,上一节教程 express+nodejs快速创建一个项目 在创建一个项目后,views目录下的文件后缀为 .jade . 打开 index.jade,具体内容如下图(忽略 header.j ...
- node.js中的模板引擎jade、handlebars、ejs
使用node.js的Express脚手架生成项目默认是jade模板引擎,jade引擎实在是太难用了,这么难用还敢设为默认的模板引擎,过分了啊!用handlebars模板引擎写还说的过去,但笔者更愿意使 ...
- Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API
A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...
- nodeJs学习-09 模板引擎 jade、ejs
模板引擎: jade -破坏式.侵入式,强依赖:用了之后不能随便用别的引擎 ejs - 温和.非侵入时.弱依赖 jade使用 const jade = require('jade'); var str ...
- nodeJs学习-12 consolidate适配各种模板引擎
const express=require('express'); const static=require('express-static'); const cookieParser=require ...
- js 模板引擎 jade使用语法
Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...
- knockoutJS学习笔记02:jsRender模板引擎
上一篇最后提到了模板,并尝试自己编写一个最简单版本:有些朋友可能用过 jqtmpl,这是一个基于jquery的模板引擎,不过它已经不再更新了,而且据说渲染速度比较慢.这里介绍另外一个模板引擎:jsRe ...
- 第115天:Ajax 中artTemplate模板引擎(一)
一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...
- express中ejs模板引擎
1.在 app.js 中通过以下两个语句设置了 引擎类型 和页面模板的位置: app.set('views', __dirname + '/views'); app.set('view engine' ...
随机推荐
- codeforce Round #599(Div.2)
题目传送门 A. Maximum Square 题目意思是给你n个长条,每个长条的高度是num[i](0 < i < n),每一条的宽度都是 1 :然后求这些长条可以组成的最大面积的正方形 ...
- foreach循環體控制
通常情況下,在程式中的cursor定義之前,整合了l_sql變量后,轉化sql語句時,通過檢查STATUS的值來判斷sql語句是否有錯誤. 語句如: if STATUS th ...
- 02.RDB持久化配置与工作流程
一.如何配置RDB持久化机制 配置文件redis.conf save 60 1000 表示每隔60s,检查如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redi ...
- DJL 之 Java 玩转多维数组,就像 NumPy 一样
本文适合有 Java 基础的人群 作者:DJL-Lanking HelloGitHub 推出的<讲解开源项目>系列.有幸邀请到了亚马逊 + Apache 的工程师:Lanking( htt ...
- Spring Boot 整合Redis 实现缓存
本文提纲 一.缓存的应用场景 二.更新缓存的策略 三.运行 springboot-mybatis-redis 工程案例 四.springboot-mybatis-redis 工程代码配置详解 ...
- Spring 框架(持续完善中)
目录标题 一.Spring 框架 Spring 是什么? Spring Framework 核心概念 了解Spring 框架的架构图 二.Spring Framework 之 IOC 开发的步骤流程 ...
- Java数据类型之Cache模式
1.关于Java数据类型 基本数据类型 基本数据类型有8种,每种基本数据类型都有对应的引用类型. 类型 描述 长度 可表示数据 包装类型 boolean 布尔型 1 true.false Boolea ...
- JumpServer 架构浅解
Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent.完全开源,GPL授权 设计思路 设计一个跳转网关,所有 ...
- Unity接入多个SDK的通用接口开发与资源管理(二)
接着上篇,本篇对SDK接口进行封装.在开始之前,需要先了解下面知识. (1)unity与android之间的交互 unity通过下面方式调用android中的函数: 方法一: AndroidJavaC ...
- mongodb查询语句与sql语句对比
左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * from users db.users.find({"age" ...