JS模板工具lodash.template的用法

underscore的template方法是比较常用的JS模板工具,它的好处是,你不用额外找工具了,通常你的项目都会加载一个underscore。

 

template          _.template(templateString, [settings]) 
将 JavaScript 模板编译为可以用于页面呈现的函数, 对于通过JSON数据源生成复杂的HTML并呈现出来的操作非常有用。 模板函数可以使用 <%= … %>插入变量, 也可以用<% … %>执行任意的 JavaScript 代码。 如果您希望插入一个值, 并让其进行HTML转义,请使用<%- … %>。 当你要给模板函数赋值的时候,可以传递一个含有与模板对应属性的data对象 。 如果您要写一个一次性的, 您可以传对象 data 作为第二个参数给模板 template 来直接呈现, 这样页面会立即呈现而不是返回一个模板函数. 参数 settings 是一个哈希表包含任何可以覆盖的设置 _.templateSettings.

 

var compiled = _.template("hello: <%= name %>");
compiled({name: 'moe'});
=> "hello: moe"

var template = _.template("<b><%- value %></b>");
template({value: '<script>'});
=> "<b>&lt;script&gt;</b>"

也可以在 JavaScript 代码中使用 print. 有时候这会比使用 <%= ... %> 更方便.

var compiled = _.template("<% print('Hello ' + epithet); %>");
compiled({epithet: "stooge"});
=> "Hello stooge"

如果ERB式的分隔符您不喜欢, 您可以改变Underscore的模板设置, 使用别的符号来嵌入代码.定义一个 interpolate 正则表达式来逐字匹配嵌入代码的语句, 如果想插入转义后的HTML代码则需要定义一个 escape 正则表达式来匹配,还有一个 evaluate 正则表达式来匹配您想要直接一次性执行程序而不需要任何返回值的语句.您可以定义或省略这三个的任意一个.例如, 要执行Mustache.js类型的模板:

_.templateSettings = {
  interpolate: /\{\{(.+?)\}\}/g
};

var template = _.template("Hello {{ name }}!");
template({name: "Mustache"});
=> "Hello Mustache!"

默认的, template 通过 with 语句来取得 data 所有的值. 当然, 您也可以在 variable 设置里指定一个变量名. 这样能显著提升模板的渲染速度.

_.template("Using 'with': <%= data.answer %>", {variable: 'data'})({answer: 'no'});
=> "Using 'with': no"

预编译模板对调试不可重现的错误很有帮助. 这是因为预编译的模板可以提供错误的代码行号和堆栈跟踪, 有些模板在客户端(浏览器)上是不能通过编译的 在编译好的模板函数上, 有 source 属性可以提供简单的预编译功能.

<script>
  JST.project = <%= _.template(jstText).source %>;
</script>

nodejs中:推荐:

data是填充的数组数据;

file是html文件;

返回的file是被填充好的html文件;

      if(data) {
        let compiled = _.template(file)
        file = compiled(data)
        // console.log(file)
      }

 

 

把下面代码保存成html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>

<div id="example1"></div>
<div id="example2"></div>

<script type="text/template" id="tpl1">
<% _.each(datas, function (item) { %>
    <div class="outer">
        <%= item.film %> - <%= item.url %> - <%= item.director %>
    </div>
<% }); %>
</script>
<script type="text/template" id="tpl2">
<% if ( 2 + 4 === 6 ) {
    _.each(datas, function (item) { %>
        <div class="outer">
            <%= item.film %> - <%= item.url %> - <%= item.director %>
        </div>
    <% });
} %>
</script>

<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="http://cdn.bootcss.com/underscore.js/1.8.3/underscore-min.js"></script>
<script type="text/javascript">
var datas = [
    {
        film: '电影名称1',
        url: 'http://www.baidu.com',
        director: '导演名称1'
    },
    {
        film: '电影名称2',
        url: 'http://www.baidu.com',
        director: '导演名称2'
    },
    {
        film: '电影名称3',
        url: 'http://www.baidu.com',
        director: '导演名称4'
    },
    {
        film: '电影名称4',
        url: 'http://www.baidu.com',
        director: '导演名称4'
    },
];

$('#example1').html( _.template($('#tpl1').html(), datas) );
$('#example2').html( _.template($('#tpl2').html(), datas) );
</script>

</body>
</html>

_.template(templateString, [settings])

下划线变量是underscore变量的别称。

templateString是一个模板字符串,template函数负责解析这个模板字符串,所以这个模板字符串需要按规矩写,根据官方的介绍,这个字符串本质是js、标识符、html代码三者糅合的字符串。

<script type="text/template" id="tpl">
<% _.each(datas, function (item) { %>
    <div class="outer">
        <%= item.film %> - <%= item.url %> - <%= item.director %>
    </div>
<% }); %>
</script>

type="text/template"是为了让浏览器不把这个script内的内容当做js来解析,同时script的display:none还继续生效,保证模板字符串不会被显示出来。

模板里凡是js代码,要被<% … %>包裹起来,比如<% _.each(datas, function (item) { %><% }); %>。对于列表内容,这句代码足够用了。

模板里凡是变量代码,要被<%= … %>包裹起来,比如<%= item.film %><%= item.url %><%= item.director %>

所以,我们写代码的方式可以是先写JS代码,然后写HTML代码,然后把JS代码用<% … %>包裹起来,以及把HTML代码中的变量用<%= … %>包裹起来,这样就能满足90%的日常需要了。

[settings]是一个json数组,数组的每个元素都是一个json对象,这个json数组负责提供内容。


 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 在web项目中引入vue.jslodash.js可以通过以下方式实现: ```html <!-- 引入vue.js --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <!-- 引入lodash.js --> <script src="https://cdn.jsdelivr.net/npm/lodash/lodash.min.js"></script> ``` 2. 实现插入数字和平滑过渡的过程可以使用Vue的过渡效果。首先,在Vue组件中定义一个data属性来存储数字列表,然后使用v-for指令渲染列表中的每个数字。在点击“随机插入一个数字”按钮时,向数字列表中添加一个随机数,并设置该数字的初始状态为隐藏。随后,使用Vue的过渡效果,在数字列表中添加该数字,并实现平滑过渡。代码示例如下: ```html <template> <div> <!-- 渲染数字列表 --> <transition-group name="list" tag="ul"> <li v-for="num in nums" :key="num" v-show="showNums.includes(num)">{{ num }}</li> </transition-group> <!-- 插入数字按钮 --> <button @click="insertNum">随机插入一个数字</button> </div> </template> <script> export default { data() { return { nums: [], // 存储数字列表 showNums: [], // 存储当前显示的数字 }; }, methods: { insertNum() { const num = Math.floor(Math.random() * 100); // 生成随机数 this.nums.push(num); // 将数字添加到列表中 this.showNums.push(num); // 将数字添加到当前显示的数字中 }, }, }; </script> <style> /* 定义过渡效果 */ .list-enter-active, .list-leave-active { transition: opacity 0.5s; } .list-enter, .list-leave-to { opacity: 0; } </style> ``` 3. 实现移除数字和平滑过渡的过程也可以使用Vue的过渡效果。在点击“随机移除一个数字”按钮时,从数字列表中移除一个随机数,并设置该数字的状态为隐藏。随后,使用Vue的过渡效果,从数字列表中移除该数字,并实现平滑过渡。代码示例如下: ```html <template> <div> <!-- 渲染数字列表 --> <transition-group name="list" tag="ul"> <li v-for="num in nums" :key="num" v-show="showNums.includes(num)">{{ num }}</li> </transition-group> <!-- 插入数字按钮 --> <button @click="insertNum">随机插入一个数字</button> <!-- 移除数字按钮 --> <button @click="removeNum">随机移除一个数字</button> </div> </template> <script> export default { data() { return { nums: [], // 存储数字列表 showNums: [], // 存储当前显示的数字 }; }, methods: { insertNum() { const num = Math.floor(Math.random() * 100); // 生成随机数 this.nums.push(num); // 将数字添加到列表中 this.showNums.push(num); // 将数字添加到当前显示的数字中 }, removeNum() { const index = Math.floor(Math.random() * this.showNums.length); // 随机选择一个数字 const num = this.showNums[index]; this.showNums.splice(index, 1); // 从当前显示的数字中移除该数字 setTimeout(() => { this.nums.splice(this.nums.indexOf(num), 1); // 从数字列表中移除该数字 }, 500); // 等待过渡效果结束后再执行移除操作 }, }, }; </script> <style> /* 定义过渡效果 */ .list-enter-active, .list-leave-active { transition: opacity 0.5s; } .list-enter, .list-leave-to { opacity: 0; } </style> ``` 4. 调整顺序并实现平滑过渡可以使用Vue的过渡效果和lodash.js库。在点击“调整顺序”按钮时,使用lodash.js库的shuffle方法将数字列表随机排序。随后,使用Vue的过渡效果,将数字列表中的每个数字重新排列,并实现平滑过渡。代码示例如下: ```html <template> <div> <!-- 渲染数字列表 --> <transition-group name="list" tag="ul"> <li v-for="num in nums" :key="num">{{ num }}</li> </transition-group> <!-- 插入数字按钮 --> <button @click="insertNum">随机插入一个数字</button> <!-- 移除数字按钮 --> <button @click="removeNum">随机移除一个数字</button> <!-- 调整顺序按钮 --> <button @click="shuffleNums">调整顺序</button> </div> </template> <script> import _ from 'lodash'; // 引入lodash.js库 export default { data() { return { nums: [], // 存储数字列表 }; }, methods: { insertNum() { const num = Math.floor(Math.random() * 100); // 生成随机数 this.nums.push(num); // 将数字添加到列表中 }, removeNum() { const index = Math.floor(Math.random() * this.nums.length); // 随机选择一个数字 this.nums.splice(index, 1); // 从数字列表中移除该数字 }, shuffleNums() { const shuffledNums = _.shuffle(this.nums); // 调用lodash.js库的shuffle方法随机排序数字列表 this.nums = shuffledNums; // 更新数字列表 }, }, }; </script> <style> /* 定义过渡效果 */ .list-enter-active, .list-leave-active, .list-move { transition: transform 0.5s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(30px); } </style> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值