分享ejs动态加载模板
发布于 9 年前 作者 yuenshui 7542 次浏览 最后一次编辑是 8 年前 来自 分享

https://github.com/yuenshui/EJS-Dynamic-include-template

EJS-Dynamic-include-template

EJS Dynamic include template 动态include模板 目前ejs不支持动态加载模板文件,比如:

<div class="col-lg">
	<%- include inc/inc.debugLog.html %>
</div>

通用模板里,如果想吧“debugLog”做为一个变量传入模板,实现加载。ejs就不支持了。 下面是实现这个功能的方法:

1、修改ejs的源码:node_modules/ejs/lib/ejs.js 475行(大约)

      var include = function (path, includeData) {
        var d = utils.shallowCopy({}, data);
        if (includeData) {
          d = utils.shallowCopy(d, includeData);
        }
        return includeFile(path, opts)(d);
      };

改为:

      var include = function (path, includeData) {
	      if(typeof includeData.realPath != "undefined") {
		      path = includeData.realPath;
	      }
        var d = utils.shallowCopy({}, data);
        if (includeData) {
          d = utils.shallowCopy(d, includeData);
        }
        return includeFile(path, opts)(d);
      };

增加了3行代码

2、模板使用

<%- include('', {realPath:'inc/inc.' + data.PageName + '.html'}) %>

realPath属性将会作为模板相对路径传入

ejs 2.3.1 测试通过

1 回复

收藏了,谢谢。

回到顶部