模板引擎art-template

本人的学习笔记


学node的时候看的最懵逼的其实就是模板引擎,原理也是很简单,但并非是基础语法那样一看就明白的东西,所以有系统学习的必要。同时这也是前端必备技能栈之一。

介绍

art-template是腾讯发行的(Σ(っ °Д °;)っ
文档是中文的
功能是将html数据和模板进行拼接

下载

npm install art-template

引入

const template=require(‘art-template’)

告诉模板引擎要拼接的数据和模板在哪

const html =template(‘模板路径’,数据);

基本使用实例

//导入模板引擎模块
const template =require('art-template');
const pate=require('path')
//将特定模板和特定数据进行拼接,第一个参数是模板路径(注意必须使用绝对路径)
//使用path.join的一个好处就是能获取不同的系统的api,保证可移植性,关于path包的用法,请参考我的另一篇文章:nodejs学习笔记(十)
//第二个参数是要在模板中显示的数据,对象类型
const html=template(path.join(__dirname,'views',index.art'),{
    data:{
        name:'张三',
        age:20,
        content='<h1>我是标题</h1>'
    }
})
//html是返回的字符串

文件中必定是html文本

<div>
    <span>{{data.name}}</span>
    <span>{{data.age}}</span>
<div>

views

views是约定俗称的模板文件夹

模板语法

art-template提供了两种模板语法:标准语法和原始语法
原始语法就是js语法套上一个外套(外套比较繁琐…)

输出

<!-- 标准语法 -->
<p>{{name}}</p>
<p>{{1+1}}</p>
<p>{{content}}</p>
<p>{{@content}}</p>
<!-- 为了安全考虑,模板引擎默认不解析标签,标准语法需要加入@符号,原始语法需要=变成- -->
<!-- 原始语法 -->
<p><%= name%></p>
<p><%= 1+2 %></p>
<p><%= content %></p>
<p><%- content %></p>

条件判断

<!-- 标准语法 -->
{{if age>18}}
    年龄大于18
{{else if age < 15}}
    年龄小于15 
{{else }}
    年龄不符合要求
{{/if}}
{{if}}
<!-- 原始语法 ,更复杂,更强大-->
<% if ( age > 18 ){ %> 
    年龄大于18  
<% } else if( age < 15 > ){%>
    年龄小于15
<% } >else ) % >
    年龄不符合条件
<% } %>

循环

{
users:[{
    name:"张三",
    age:20,
    sex:"男"
},{
    name:"李四",
    age:20,
    sex:"男"
},{
    name:"王五",
    age:20,
    sex:"女"
}]
}
<ul>
<!-- 标准语法,$value代表当前循环的这一项 -->
{{each users}}
    <li>
        {{$value.name}}
        {{$value.age}}
        {{$value.sex}}
    </li>
{{/each}}
<!-- 原始语法 -->
<ul>
    <% for(var i=0;i<users.length;i++>{) %>
    <li>
        <%=users[i].name %>
        <%=users[i].age %>
        <%=users[i].sex %>
    </li>
</ul>

※子模版

使用子模版,可以将网站公共区块(头部,底部)抽离到单独的文件中去
!!!
太有用了吧这个
(md我怎么说话这么像旅人)

新建 header.art footer.art
做过wordexpress的人应该很熟悉这两个文件吧

{{ include './common/header.art'}}
<% include('./common/header.art') %>
<% include('./common/footer.art') %>
<div>  {{msg}} </div>
{{ include './common/footer.art'}}

学了一半之后,不禁感慨,模板引擎真的是太有用了,解决了前端的很多痛点,一定要认真掌握才行.
不过现在都一点多了…深夜学习真爽

※模板继承

模板继承允许将html骨架抽离到单独的文件中,其它页面模板可以继承骨架文件.

允许预留位置,可以使用其它模板填充.

填充css内容,js内容,页面主体内容

骨架文件
layout.art

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    {{block 'link'}}{{/block}}
</head>
<body>
   {{block 'content'}}{{/block}} 
</body>
</html>

05.art

<!-- extend是单标记 -->
{{extend './common/layout.art'}}

{{block 'content'}}
<p>{{ msg }}</p>
{{/block}}

{{block 'link'}}
<link rel="stylesheet" type="text/css" herf="./main.css">
<!-- 外链一个css文件 -->
{{/block}}

模板配置

向模板中导入变量

下载时间模块
npm install dateformat

//导入模板引擎模块
const template =require('art-template');
const pate=require('path')
const dateFormat=require('dateformat')
//导入模板变量
template.defaults.imports.dateFormat=dateFormat;

const html=template(path.join(__dirname,'views',index.art'),{
    time:new Date()
})
//html是返回的字符串

06.art

<!-- 直接使用time会出现格式上的问题,需要向模板中导入第三方方法来处理数据 -->
{{ dateFormat((time,'yyyy-mm-dd'}}

模板配置

当要渲染多个模板文件时

const template =require('art-template');
const pate=require('path')
const dateFormat=require('dateformat')
//设置模板根目录
template.defaults.root=path.join(__dirname,'views');

template.defaults.imports.dateFormat=dateFormat;

const html=template('06.art',{
    time:new Date()
})

还可以设置默认模板后缀…(现在觉得前端真的大多数时搬砖的工作…起码开始是这样)

使用:
template.defaults.extname=".art";
习惯使用html的话,也可以:
template.defaults.extname=".html";

然后到这里就结束了,更深入学node的话还是要多做几个项目
这也是我下一步的计划.

发布了165 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/treblez/article/details/103813555