pug
在學習 node.js 時,利用 pug 可以使用像 JavaScript 設定變數、判斷式、Loop 的功能,再加上只需要在 Render 設定要套到到 pug 內的資料,就可以作到使用相同的一個 pug 頁面呈現多個不同內容的頁面,加上因為覺得十分的方便,所以筆記起來。
使用手冊:https://pugjs.org/api/getting-started.html
線上練習:PugHtml
用 NPM 安裝
1 | npm install pug --save |
使用
編寫的方式和 HTML 差別不大,主要有:
不用在標籤名稱外加
<>
括號只要寫標籤名稱加上一格半形的空格就是一個元件
內容文字要在空格後,和標籤名稱同行
|
有切開、單獨成一個字串的意思,可以用在內容文字換行,以及文字與標籤的分隔使用1
2
3
4
5// 在 p 標籤內的換行
p
| abc
| de
//
要在標籤內加上第二個標籤時,要在第二個標籤名稱前加上一格
Tab
有 Class 時在 ClassName 前加
.
,有 Id 時在 IdName 前加上#
,和 CSS 選取器一樣
載入 pug
1 | const pug = require('pug'); |
還需要設定 view engine
屬性,讓 node 在執行時知道網頁是用 pug 檔
1 | app.set('view engine', 'pug'); |
這不是必要的設定,沒設定時只要在檔名後加副檔名就可以了。
路徑
設定尋找檔案時要從哪一個資料夾開始向內尋找
1 | app.set('views', 'path/views'); |
在設定網頁呈現時,就會到 path/views
內找檔名是 index
的 pug 檔
1 | app.get('/', function (req, res, next) { |
If… Else…
在 node 內是可以事先設定變數,之後再使用
1 | var authorized = true |
在 pug 時也是一樣,所以加上 If... Else...
時,就可以作判斷
1 | - var authorized = true; |
case 判斷
1 | - var Num = 2 |
變數
- 變數可以是取得從 node 後端傳來的資料,也可以是在 pug 作設定
- 純文字的變數可以用
#{變數名稱}
- HTML 的屬性加變數是用
${變數名稱}
- 在 pug 要設定變數使用就要在前面加上
-
要知道有沒有正確取得資料,pug 有 pug.compile() 可以在傳到 pug 前先在 JavaScript 內做測試
1 | // index.pug 檔內容 |
要檢查呈現的樣子
1 | const compiledFunction = pug.compileFile('template.pug'); |
each loop
1 | app.get("/bookstore", function (req, res, next) { |
要用 index
內的廻圈取出物件的值時,就可以使用 each 變數名 in 物件
的方法
1 | each book in bookStore |
each
and while
使用例子參考
script 標籤
1 | script. |
在 script
後要加 .
,沒加時全部都會被轉成 HTML 格式使用
block / extends / include
block
在樣版 pug 內保留可加入內容的區塊extends
把內容加入到指定的樣版之中include
會完整的把指定的網頁加入到目前的位置
1 | //- layout.pug |
要加入的 pug
1 | //- page.pug |
再利用 include
加入 footer.pug 的內容
1 | //- footer.pug |
就可以合併完成一個網頁
1 | <html> |