后台模板引擎ejs與前台模板引擎artTemplate的簡單介紹


動態網頁是指前端頁面當中的數據內容來源於后台數據庫,前端的html代碼會隨着后台數據的變化而變化,是動態生成的。制作動態網頁有兩種方式,一種方式是在后台拿到前端的html模板,利用后台模板引擎(如ejs等)在后台完成數據與html模板的拼接,最后把拼接完成的完整html代碼返回給前端。但是這種工作模式會逐步走向過時,因為它不符合前后端分離的趨勢。而第二種方式則更加符合我們所提倡的前后端分離的概念,即后台只提供json數據,不做模板拼接的工作,前端通過ajax來向后台請求json數據,然后在前台利用前台模板引擎(如artTemplate等)完成數據與模板的拼接工作,從而生成完整的html代碼。下面就詳細介紹這兩種模板引擎的常用用法。

一、后台模板引擎ejs

現在比較著名的后台模板引擎有ejsjade。這兩個都屬於node的第三方模塊包,都可以通過npm的方式進行下載,我們下面具體介紹ejs的用法。

1、下載並引包

在當前的項目文件夾下,用命令->npm install ejs來下載這個模塊包。然后通過const ejs = require('ejs');來引包。

2、書寫前端模板

由於之后要在后台完成模板拼接的工作,並且前端的數據也來源於后台,故對於前端模板,我們只需要根據ejs所需要的模板的語法規則,把之后要填入數據的部分用特殊的標識符標出即可。我們用<% %>來包裹在html代碼當中出現的js代碼,對於html代碼當中需要數據輸出的部分用<%= %>來包裹表示,這些標識符內部出現的變量、數組、對象等均來源於后台數據。如index.html當中示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ejs-template</title>
</head>
<body>
    <h1>模板字符串<%= a %></h1>
    <ul>
        <% for(var i = 0; i < list.length; i++){ %>
            <li><%= list[i] %></li>
        <% } %>
    </ul>
</body>
</html>
3、后台模板引擎完成模板拼接

我們將前端模板index.html文件,與主文件1.js放在同一個目錄下,在1.js當中使用http模塊可以新建一個服務器,當用戶訪問指定ip和指定端口號時,會利用fs模塊去讀index.html文件當中的內容,直接得到為buffer類型,再使用.toString()方法將其轉換為字符串類型。在后台利用ejs.render()方法把模板字符串和json數據拼接,生成完整的html代碼字符串,然后設置好響應頭,把完整的內容通過響應體的方式呈遞給前端頁面。下面為主文件1.js的示例代碼:

const ejs = require('ejs');
const http =require('http');
const fs = require('fs');
const path = require('path');
var server = http.createServer((req,res)=>{
    var dictionary = {
        a:'ejs',
        list:['apple','banana','pear','tomato']
    };
    var target = path.join(__dirname,'./index.html');
    fs.readFile(target,(err,data)=>{
        if(err) throw err;
        var template = data.toString();
        var html = ejs.render(template,dictionary);
        res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});
        res.end(html);
    });
});
server.listen(3000,'192.168.155.1');

開啟該服務器之后,訪問對應的網址,則呈遞的頁面結果如下圖所示:

二、前台模板引擎artTemplate

1、下載並引包

我們在github上搜索artTemplate,下載地址為 https://github.com/lhywork/ar...,下載完成之后在dist文件夾下可以看到對應的四個js源文件,由於artTemplate支持兩種語法,簡潔語法版和原生語法版,其中js文件名當中帶-native的為原生語法版,帶-debug的為帶注釋的js文件。下面我們只介紹原生語法版的用法,為了使引入的文件盡可能的小,所以選擇template-native.js文件進行引入。
由於是前台模板引擎,所以我們在前端文件index.html當中用<script src="template-native.js"></script>的方式引入。

2、書寫模板

我們在該前端頁面當中在<script type="text/html" id="test"></script>標簽對當中書寫html模板字符串,其中給該script標簽定義一個id名,便於識別。我們用<% %>來包裹在html代碼當中出現的js代碼,對於html代碼當中需要數據輸出的部分用<%= %>來包裹表示,這些標識符內部出現的變量、數組、對象等均來源於后台數據。這種用法與之前介紹的ejs相類似。下面為模板的示例代碼:

<script type="text/html" id="test">
    <h3><%= title %></h3>
    <ul>
        <% for(var i = 0; i < list.length; i++){ %>
            <li><%= list[i] %></li>
        <% } %>
    </ul>
</script>
3、前台模板引擎完成模板拼接

在此我們在前端定義一個json數據,實際上數據應該來自於ajax請求的后台數據。再利用固定的方法名template(),將模板字符串與json數據進行模板拼接,形成完整的html代碼,注入到dom元素當中。其中index.html的示例代碼為:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>artTemplate-demo</title>
    <script src="template-native.js"></script>
    <script type="text/html" id="test">
        <h3><%= title %></h3>
        <ul>
            <% for(var i = 0; i < list.length; i++){ %>
                <li><%= list[i] %></li>
            <% } %>
        </ul>
    </script>
    <script>
        window.onload = function(){
            var dictionary = {
                title : 'artTemplate-demo',
                list: ['apple','banana','pear','tomato']
            };
            var html = template('test',dictionary);
            document.getElementById('content').innerHTML = html;
        }
    </script>
</head>
<body>
    <div id="content"></div>
</body>
</html>

前端頁面渲染的結果如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM