這次帶給大家如何使用nodejs前端模板引擎swig,使用nodejs前端模板引擎swig的注意事項有哪些,下面就是實戰案例,一起來看一下。
相對於jade,我還是比較喜歡swig前端模板引擎,jade雖然語法簡練高效了不少,但是在我這最大的問題是
他沒有一個html該有的樣子。 。 。
所以我還是決定使用swig,頁面結構,樣子都是熟悉的樣子,使用起來順手了許多。
很多朋友也在糾結二者的優缺點,這個根據需求因人而異吧
這是兩者的比較
http://vschart.com /compare/swig-template-engine/vs/jade-template-engin
#下面我們一起學習下swig這個前端模板引擎
swig的簡單介紹
swig是JS模板引擎,它有以下特點:
支援大多數主流瀏覽器。
表達式相容性好。
物件導向的範本繼承。
將過濾器和轉換套用到模板中的輸出。
可依路勁渲染頁面。
支援頁面重複使用。
支援動態頁面。
可擴充、可自訂。
一.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, 執行效果如下
瀏覽器運行.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 %} <p> <h1>hello swig</h1> <p> {% 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迴圈內建變數:
loop.index:目前迴圈的索引(1開始)
loop.index0:目前循環的索引(0開始)
loop.revindex:當前循環從結尾開始的索引(1開始)
// arr = [1, 2, 3] { % for key, val in arr % } <p>{{ loop.index }} -- {{ key }} -- {{ val }}</p> { % endfor % }
8.強大的內建過濾器
add(value):使变量与value相加,可以转换为数值字符串会自动转换为数值。
addslashes:用 \ 转义字符串
capitalize:大写首字母
date(format[, tzOffset]):转换日期为指定格式
format:格式
tzOffset:时区
default(value):默认值(如果变量为undefined,null,false)
escape([type]):转义字符
默认: &, <, >, ", '
js: &, <, >, ", ', =, -, ;
first:返回数组第一个值
join(glue):同[].join
json_encode([indent]):类似JSON.stringify, indent为缩进空格数
last:返回数组最后一个值
length:返回变量的length,如果是object,返回key的数量
lower:同''.toLowerCase()
raw:指定输入不会被转义
replace(search, replace[, flags]):同''.replace
reverse:翻转数组
striptags:去除html/xml标签
title:大写首字母
uniq:数组去重
upper:同''.toUpperCase
url_encode:同encodeURIComponent
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 %}
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
vue-cli与webpack处理静态资源的方法及webpack打包使用步奏详解
以上是如何使用nodejs前端模板引擎swig的詳細內容。更多資訊請關注PHP中文網其他相關文章!