nodejs前端模板引擎swig入门详解


Posted in NodeJs onMay 15, 2018

相对于jade,我还是更喜欢swig前端模板引擎,jade虽然语法简练高效了不少,但是在我这最大的问题是

他没有一个html该有的样子。。。

所以我还是决定使用swig,页面结构,样子都是熟悉的样子,使用起来顺手了许多。

很多朋友也在纠结二者的优缺点,这个根据需求因人而异吧

这是两者的比较

http://vschart.com/compare/swig-template-engine/vs/jade-template-engin

下面我们一起学习下swig这个前端模板引擎

swig的简单介绍

swig是JS模板引擎,它有如下特点:

  1. 支持大多数主流浏览器。
  2. 表达式兼容性好。
  3. 面向对象的模板继承。
  4. 将过滤器和转换应用到模板中的输出。
  5. 可根据路劲渲染页面。
  6. 支持页面复用。
  7. 支持动态页面。
  8. 可扩展、可定制。

一. swig的安装

npm install swig --save

二.和express框架集成

app.js

var express = require('express');
var swig = require('swig');
var path = require('path')
var app = express();
var port = process.env.PORT || 4000

//设置swig页面不缓存
swig.setDefaults({
 cache: false
})
app.set('view cache', false);
app.set('views','./views/pages/');
app.set('view engine','html');
app.engine('html', swig.renderFile);
app.listen(port);

console.log('server is started at http://localhost:'+port);
//index page
app.get('/',function(req, res){
 res.render('index',{
  title:'首页 ',
  content: 'hello swig'
 })
})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>{{ title }}</title>
</head>
<body>
 {{ content }}
</body>
</html>

然后测试运行

node app.js

在浏览器输入:http://localhost:4000, 执行效果如下

nodejs前端模板引擎swig入门详解

浏览器运行.png

三.基本用法

1.变量

{{ name }}

这里需要注意的是前后两端都要有空格,这样{{name}}写就会报错

2.属性

{{ student.name }}

3.模板继承

Swig 使用 extends 和 block 来实现模板继承 layout.html

首先我们定义一个模板

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>{% block title %}{% endblock %}</title>
 {% block head %}{% endblock %}
</head>
<body>
 {% block content %}{% endblock %}
</body>
</html>

这个模板里面我们定义了三个block块,子模板可以对这三个block继承

然后我们写一个index.html继承这个模板

{% extends './layout.html' %}
{% block title %} index {% endblock %}
{% block content %}
 <div>
   <h1>hello swig</h1>
  <div>
{% endblock %}

注意我这里并没有复写{% block head %}{% endblock %}这个块

也就是说我们可以在layout.html模板页面里面定义很多block,而子页面可以有选择性的实现。

4.include模板

包含一个模板到当前位置,这个模板将使用当前上下文

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>{% block title %}{% endblock %}</title>
 {% include "./includes/head.html" %}
 {% block head %}{% endblock %}
</head>
<body>
 {% include "./includes/header.html" %}
 {% block content %}{% endblock %}
</body>
</html>

5.if判断

{ % if name === '郭靖' % }
 hello 靖哥哥
{ % endif % }

6.if-else判断

{ % if name === '郭靖' % }
 hello 靖哥哥
{ % elseif name === '黄蓉' % }
 hello 蓉妹妹
{ % else % }
 hello 欧阳峰
{ % endif % }

7.for循环

先上栗子:

// arr = [1, 2, 3]
{ % for key, val in arr % }
 <p>{ { key } } -- { { val } }</p>
{ % endfor % }

for循环内置变量:

  1. loop.index:当前循环的索引(1开始)
  2. loop.index0:当前循环的索引(0开始)
  3. loop.revindex:当前循环从结尾开始的索引(1开始)
  4. loop.revindex0:当前循环从结尾开始的索引(0开始)
  5. loop.key:如果迭代是对象,是当前循环的键,否则同 loop.index
  6. loop.first:如果是第一个值返回 true
  7. loop.last:如果是最后一个值返回 true
  8. loop.cycle:一个帮助函数,以指定的参数作为周期

使用方法:

// arr = [1, 2, 3]
{ % for key, val in arr % }
 <p>{{ loop.index }} -- {{ key }} -- {{ val }}</p>
{ % endfor % }

8.强大的内置过滤器

  1. add(value):使变量与value相加,可以转换为数值字符串会自动转换为数值。
  2. addslashes:用 \ 转义字符串
  3. capitalize:大写首字母
  4. date(format[, tzOffset]):转换日期为指定格式
  5. format:格式
  6. tzOffset:时区
  7. default(value):默认值(如果变量为undefined,null,false)
  8. escape([type]):转义字符
  9. 默认: &, <, >, ", '
  10. js: &, <, >, ", ', =, -, ;
  11. first:返回数组第一个值
  12. join(glue):同[].join
  13. json_encode([indent]):类似JSON.stringify, indent为缩进空格数
  14. last:返回数组最后一个值
  15. length:返回变量的length,如果是object,返回key的数量
  16. lower:同''.toLowerCase()
  17. raw:指定输入不会被转义
  18. replace(search, replace[, flags]):同''.replace
  19. reverse:翻转数组
  20. striptags:去除html/xml标签
  21. title:大写首字母
  22. uniq:数组去重
  23. upper:同''.toUpperCase
  24. url_encode:同encodeURIComponent
  25. url_decode:同decodeURIComponemt

使用方法:

例如我们要格式化一个时间,使用方法和linux上的管道命令非常像

{{ birthday|date('Y-m-d') }}

大写首字母

{{ name|title }}

9.set命令

用来设置一个变量,在当前上下文中复用

{% set foo = [0, 1, 2, 3, 4, 5] %}
 {% for num in foo %}
 <li>{{ num }}</li>
{% endfor %}

参考文献:http://www.iqianduan.net/blog/how_to_use_swig

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 #NodeJs
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
May 15 #NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 #NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 #NodeJs
基于nodejs res.end和res.send的区别
May 14 #NodeJs
nodeJs爬虫的技术点总结
May 13 #NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 #NodeJs
You might like
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
PHP重载基础知识回顾
2020/09/10 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
Python封装shell命令实例分析
2015/05/05 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
python如何读写csv数据
2018/03/21 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Python实现自动签到脚本功能
2020/08/20 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
自动化职业生涯规划书范文
2014/01/03 职场文书
研发工程师岗位职责
2014/04/28 职场文书
政府信息公开实施方案
2014/05/09 职场文书
爱心助学感谢信
2015/01/21 职场文书
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技