Koa項(xiàng)目總結(jié)三:ejs和art-template模板引擎讓頁(yè)面顯示動(dòng)態(tài)數(shù)據(jù)

這里矩肩,我主要整理兩種模板引擎的使用,ejsart-template

1. EJS模板引擎的使用:

1.1 安裝koa-viewsejs
npm install koa-views --save
npm install ejs --save
1.2 引入koa-views配置中間件:
const views = require('koa-views');
/**引入koa-views配置中間件:指定模板文件的目錄肃续,ejs為模板引擎*/
app.use(views(__dirname + '/views', {
    map: {html: 'ejs'},
}));

上面的代碼中黍檩,指定了模板文件的目錄為/views,且使用ejs做為模板引擎始锚。

1.3 在Koa中使用ejs:

通過(guò)ctx.render('index.html', data:data)刽酱,向模板文件傳遞數(shù)據(jù):

/*Koa代碼*/
router.get('/', async (ctx, next)=>{
    let title = 'Hello Joyitsai';
    await ctx.render('index', {title: title})
})
1.4 ejs綁定上面發(fā)送的數(shù)據(jù)用等號(hào)<%=title%>:
<!--html模板代碼-->
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
    <h3><%=title%></h3>
</body>
</html>
1.5 ejs綁定html語(yǔ)句:

如果從后端傳送的數(shù)據(jù)是html語(yǔ)句,那么要用<%-data%>來(lái)解析html語(yǔ)句:

router.get('/', async (ctx, next)=>{
    let data = '<h2>這是從后端發(fā)來(lái)的html語(yǔ)句</h2>'
    await ctx.render('index', {data:data})
})
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
    <!--解析后端發(fā)送的html語(yǔ)句用減號(hào)-->
    <%-data%>
</body>
</html>
1.6 ejs引入模板:

在實(shí)際開(kāi)發(fā)中瞧捌,像導(dǎo)航欄這樣公共的頁(yè)面結(jié)構(gòu)會(huì)單獨(dú)分離成一個(gè)模板文件棵里,然后在其他頁(yè)面中直接導(dǎo)入即可,同樣姐呐,這里也可以通過(guò)<%include header.html%>引入模板頁(yè)面殿怜,模板文件結(jié)構(gòu)如下:

|——app.js
|—— ...
|——views
    |——public
        |——header.html
    |——index.html

其中,header.html為要在index.html中引入的模板皮钠,那么引入代碼如下:

<!--public/header.html-->
<h2>這是頭部信息頁(yè)面</h2>

<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
    <!--默認(rèn)views/為主目錄了稳捆,引入路徑不加雙引號(hào)或單引號(hào)-->
    <%include public/header.html%>
</body>
</html>
1.7 ejs模板判斷語(yǔ)句:

在ejs模板中。if...else..語(yǔ)句要包在<%%>

/**后端代碼*/
router.get('/', async (ctx, next)=>{
    let age = 24
    await ctx.render('index', { age:age})
})
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
    <%if(age>20){%>
        大于20歲
    <%}else{%>
        小于等于20歲
    <%}%>
</body>
</html>
1.8 ejs模板中的循環(huán)數(shù)據(jù):

同樣麦轰,將for(var i=0;i<data.length;i++){}循環(huán)包含在<%%>中乔夯,示例代碼如下:

/**后端代碼*/
router.get('/', async (ctx, next)=>{
    let datalist = ['joyitsai', 'ming', 'bob'];
    await ctx.render('index', {datalist:datalist})
})
<body>
    <br/>
    <ul>
    <%for(var i=0;i<datalist.length;i++){%>
        <li><%=datalist[i]%></li>
    <%}%>
    </ul>   
</body>

另外,如果需要在每一個(gè)頁(yè)面都要獲取像用戶信息這樣的數(shù)據(jù)款侵,每次ctx.render()時(shí)都傳遞這個(gè)數(shù)據(jù)會(huì)比較麻煩末荐,解決辦法是,通過(guò)ctx.state = {data:data}來(lái)設(shè)置公共數(shù)據(jù)新锈,綁定在ctx.state上的數(shù)據(jù)甲脏,可以在任何一個(gè)頁(yè)面中直接調(diào)用,而不需要通過(guò)ctx.render()來(lái)傳遞了。
關(guān)于ejs模板引擎的一些常用用法都列舉出來(lái)了块请,多多練習(xí)就記熟了娜氏,其實(shí)并沒(méi)什么難度。

2. art-template模板引擎的使用:

art-template是常用模板引擎中渲染速度最快的墩新,看下面一張測(cè)試圖:

image.png

art-template支持ejs語(yǔ)法贸弥,所以可以完全按照ejs的語(yǔ)法來(lái)寫(xiě)。

2.1 安裝art-template引擎:
npm install art-template --save
npm install koa-art-template --save
2.2 引入并配置art-template
const Koa = require('koa');
const render = require('koa-art-template');
const path = require('path');

const app = new Koa();
render(app, {
    root: path.join(__dirname, 'views'), //模板文件所在目錄
    extname: '.html',                    //聲明模板文件的后綴名
    debug: process.env.NODE_ENV !== 'production'    //是否開(kāi)啟調(diào)試模式
})
2.3 art-template模板引擎語(yǔ)法:

基本與ejs的相同海渊,除引入其他模板文件除外绵疲,在art-template中,引入其他模板文件的語(yǔ)法如下:

<body>
    <!--art-template中引入模板時(shí)要加括號(hào)和引號(hào)-->
    <%include('header.html')%>
    <h3><%=title%></h3>
</body>

其他語(yǔ)法自行參考官方文檔:art-template語(yǔ)法臣疑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盔憨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讯沈,更是在濱河造成了極大的恐慌郁岩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芙盘,死亡現(xiàn)場(chǎng)離奇詭異驯用,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)儒老,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蝴乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驮樊,你說(shuō)我怎么就攤上這事薇正。” “怎么了囚衔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵挖腰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我练湿,道長(zhǎng)猴仑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任肥哎,我火速辦了婚禮辽俗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篡诽。我一直安慰自己崖飘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布杈女。 她就那樣靜靜地躺著朱浴,像睡著了一般吊圾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翰蠢,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天项乒,我揣著相機(jī)與錄音,去河邊找鬼梁沧。 笑死板丽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的趁尼。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼猖辫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酥泞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啃憎,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芝囤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辛萍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悯姊,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年贩毕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悯许。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辉阶,死狀恐怖先壕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谆甜,我是刑警寧澤垃僚,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站规辱,受9級(jí)特大地震影響谆棺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罕袋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一改淑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炫贤,春花似錦溅固、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春亮元,著一層夾襖步出監(jiān)牢的瞬間猛计,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工爆捞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奉瘤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像噩死,于是被迫代替她去往敵國(guó)和親秽之。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容