ejs learning

nodejs的模板引擎有很多, ejs是比较简单和容易上手的。常用的一些语法:

  • 用<%...%>包含js代码
  • 用<%=...%>输出变量 变量若包含 '<' '>' '&'等字符 会被转义
  • 用<%-...%>输出变量 不转义
  • 用<%- include('user/show') %>引入其他模板 包含 ./user/show.ejs
  • 用<%# some comments %>来注释,不执行不输出
  • <%% 转义为 '<%'
  • <% ... -%> 删除新的空白行模式?
  • <%_ ... _%> 删除空白符模式

安装

npm install ejs
bower install ejs
//ejs可以配合express框架使用,或直接在node中/浏览器中使用

基本用法

//template.ejs:
<% if(comic) { %>
<h2><%=comic.name%></h2>
<% } %> //test.js:
var comic = {name: 'one piece'}; // 渲染文件模板,
// comic.ejs 包含 header.ejs footer.ejs,
// 若include了文件 必须指定 filename参数 , 参数为文件路径,
// 文件所在目录为查找include资源的目录 path.diranme(specialFilepath)
var html = ejs.render( fs.readFileSync('comic.ejs', 'utf8'), {'comic': comic}, {filename: __dirname+'\\abc.js'});
console.log(html);

方法

  • ejs.compile() ejs.render()

      var template = ejs.compile(str, options); //=> function
    template(data); //=> html ejs.render(str, data, options); //=>html //or 把str data options都放在一个object中传入
    ejs.render(allOptions);
  • options参数

    • cache 缓存编译后的函数(ejs.compile(..) ,需要 filename参数作为缓存的key
    • filename 用于缓存的key,和include
    • context 函数的执行上下文
    • compileDebug 输出compile的信息来跟踪调试
    • client 返回编译后的函数
    • delimiter <% .. %> 指这里的%
    • debug 输出ejs.compile()得到函数的函数体
    • strict ejs.compile()返回的函数是否执行在严格模式
    • _with 是否使用 with(){..} 来访问本地变量
    • localsName 保存本地变量的对象名,默认为locals
    • rmWhitespace 移除多余空格
  • include(文件包含)

    被包含文件的路径可以是:绝对路径或相对路径,还可以传入data

      <ul>
    <% users.forEach(function(user){ %>
    <%- include('user/show', {user: user}) %>
    <%});%>
    </ul>

    include是在运行时被执行的,所以可以支持路径为变量, 如:

      <% somePath='some/path' %>
    ...
    <%- include(somePath) %>
  • 自定义模板定界符

      var ejs = require('ejs');
    var users = ['lufy', 'zoro', 'nami']; //渲染字符串模板时,指定分隔符
    //<%= ... %> 输出变量 输出表达式的结果
    var ret1 = ejs.render('<?=users.join(" | "); ?> ', {users: users}, {delimiter: '?'});
    console.log(ret1); //=>lufy | zoro | nami // 全局指定分隔符
    ejs.delimiter = '$';
    var ret2 = ejs.render('<$= users.join(" | "); $>', {users: users});
    console.log(ret2);
  • 页面布局

    ejs没有显式的支持布局功能,但是可以通过 include 页头页脚的方式,实现基本的布局。

      //comic.ejs:
    <%- include('header'); %>
    <h1>hot comic now: </h1>
    <% if(comic) { %>
    <h2><%= comic.name %></h2>
    <% } %>
    <%- include('footer') %> //test.js:
    var html = ejs.render( fs.readFileSync('comic.ejs', 'utf8'), {'comic': comic}, {filename: __dirname+'\\abc.js'});

ejs简单教程的更多相关文章

  1. Git和Github简单教程

    原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章 ...

  2. FusionCharts简单教程(三)-----如何自定义图表上的工具提示

    最近有蛮多人总是问我这个FusionCharts制表的问题,帮助他们解决之后,在昨晚发现以前整理的笔记中有这个简单教程,而且以前也发表了几篇这个博文,所以就将其全部上传上来供别人参考.如有不正确之处望 ...

  3. FusionCharts简单教程(八)-----使用网格组件

            有时候我们会觉得使用图像不够直接,对于数据的显示没有表格那样直接明了.所以这里就介绍如何使用网格组件.将网格与图像结合起来.网格组件能够将FusionCharts中的单序列数据以列表的 ...

  4. Qt Quick 简单教程

    上一篇<Qt Quick 之 Hello World 图文详解>我们已经分别在电脑和 Android 手机上运行了第一个 Qt Quick 示例—— HelloQtQuickApp ,这篇 ...

  5. Git和Github简单教程(收藏)

    原文链接:Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的 ...

  6. mysql安装简单教程(自动安装/配置安装)

    mysql安装简单教程(自动安装/配置安装) 1.1前言: 由于特殊原因,在最近2-3个月里mysql真是安装了无数遍,每次安装都要上网找教程,每个教程基本都不一样,因此还是自己写下来比较好,毕竟自己 ...

  7. 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)

    原文链接https://www.cnblogs.com/zhouzhendong/p/Balanced-Binary-Tree.html 注意是简单教程,不是入门教程. splay 1. 旋转: 假设 ...

  8. LayaAir引擎开发HTML5最简单教程(面向JS开发者)

    LayaAir引擎开发HTML5最简单教程(面向JS开发者) 一.总结 一句话总结:开发游戏还是得用游戏引擎来开发,其实很简单啦 切记:开发游戏还是得用游戏引擎来开发,其实很简单,引擎很多东西都帮你做 ...

  9. mockito简单教程

    注:本文来源:sdyy321的<mockito简单教程> 官网: http://mockito.org API文档:http://docs.mockito.googlecode.com/h ...

随机推荐

  1. Android 真机调试显示offline

    今天调试程序部署的时候显示设备状态时offline. 然后突然想起来我通过命令行操作过设备. 然后找来一下,如下命令. adb kill-server adb devices

  2. Repeater实现数据绑定

    Repeater基础 在aspx文件中加入Repeater 控件,在<ItemTemplate></ItemTemplate>包含的范围里加入自己控制的代码,需要替换的变量使用 ...

  3. Gallery过时替代方案HorizontalScrollView

    布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:androi ...

  4. 第一局 ThreeJS-开始

    本文介绍ThreeJS使用的大体流程.(由于水平有限,请大家多多指教.) 1.ThreeJS下载和引入: (1)下载地址:https://github.com/mrdoob/three.js/arch ...

  5. MySQL数据库主从同步安装与配置总结

    MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力: ②在从主服务器进行备份,避免备份期间影响主服务器服务: ③当主服务器出现问题时 ...

  6. DedeCms 建站随笔(一)

    站名:524社区网 代码:DedeCms织梦5.7代码(UTF-8) 服务器:Linux 问题一:火车头(熊猫)采集,登录成功之后无法获取栏目列表. 原因:1.新建栏目后没有更新栏目HTML文件,并且 ...

  7. 1003 Crashing Balloon

    考察DFS的应用,判断两个数的因子. #include <stdio.h> int f1,f2; void DFS(int m,int n,int k){ ){ f2=; ) f1=; } ...

  8. Android manifest

    manifest是Android应用程序的配置文,在这里指定了改程序的资源.权限等内容,一般的manifest文件如下 <manifest xmlns:android="http:// ...

  9. 实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write Linux USB MSC (Mass Storage Class) Driver Cri ...

  10. wordpress参考网站

    wordpress大学http://www.wpdaxue.com/post-tags-and-categories-for-pages.html