mustache模板引擎的部分理解


前言

简单开头

在vue里,我们经常会写出这样的 "HTML"

<template>
	<div class="wrapper">
		<h2>今天天气真{{ str }}!</h2>
	</div>
</template>

它最终会变为这样:

	<div class="wrapper">
		<h2>今天天气真不错!</h2>
	</div>

双花括号里的str,转变成了不错,这看起来确实不错,我们可以使用 变量 决定这里边的内容

一、mustache模板引擎

Mustache是一种数据渲染模板引擎,提供了一种简单的标记语言,用于将数据与HTML或其他文本格式进行解耦。使用Mustache,数据和视图是分开的,这使得开发人员更容易管理和维护其应用程序。

在Mustache中,模板是由标记和占位符组成的。标记描述了如何渲染文本,而占位符用于引用要插入模板的数据对象。以下是Mustache中的一些基本概念:

1. {{variable}}:变量占位符,用于插入数据对象中的值。


2. {{#section}}...{{/section}}:section块,允许您对模板进行分组,以便可以按条件渲染或重复使用。


3. {{^section}}...{{/section}}:反向section块,与普通section块相反,它只有在数据对象中不存在值时才会渲染。


4. {{! comment }}:注释,用于向模板添加注释或文档。


5. {{>partial}}:包含部分,允许您在模板中插入另一个模板或部分。

二、前情提要

现在,有这样的几个方法,能让DOM结合数据生成
利用正则表达式
参考链接: String.prototype.replace()

  <script>
    const tem = '<h4>一曲新词酒一杯,{{one}}。夕阳西下几时回?<br>无可奈何花落去,{{two}}。小园香径独徘徊。</h4><p style="float:right;">——宋代·晏殊<p><h6 style="float:left;">《浣溪沙·一曲新词酒一杯》</h6>'
    const prose = {
      one: '去年天气旧亭台',
      two: '似曾相识燕归来'
    }
    function fn(template, data) {
      return template.replace(/\{\{(\w+)\}\}/g, function (fstr, $1) {
        return data[$1]
      })
    }
    document.body.innerHTML = fn(tem, prose)
  </script>

使用数组的join方法
参考链接: Array.prototype.join()

  <script>
    let arr = [
      { str: '逗号,' },
      { str: '句号。' },
      { str: '“双引号”' },
    ]
    for (let i = 0; i <= arr.length; i++) {
      document.body.innerHTML += [
        '<div>',
        '<p>' + arr[i].str + '</p>',
        '</div>',
      ].join('')
    }
  </script>

看完上面两个例子,我们就可以过渡到正题了

三、模仿mustache模板引擎实现简单案例

		_不得不说,mustache模板引擎很厉害_

先来看下面这片段:

<script type="text/template">
  <div>
      天街小雨润如酥,{{one}}。
      最是一年春好处,{{two}}。
                      ——唐代·韩愈
      《早春呈水部张十八员外》
  </div>
</script>
// 将上面的内容转成下面这样的数组
<script>
 let arr = [
 	['text', '<div>天街小雨润如酥,'],
 	['name', 'one'],
 	['text', '。最是一年春好处,'],
 	['name', 'two'],
 	['text', '。——唐代·韩愈《早春呈水部张十八员外》</div>'],
]
</script>

可以看到,DOM结合数据的写法,转变成数组了

每个子数组的第一项,总是代表了一段内容的类别。
仔细看还会发现:数组里找不出这样式的{{ 双花括号 }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值