源码:mustache


mustache模版引擎

什么是模板引擎

将数据变为视图的解决方案

  • 使用DOM:笨拙
  • 数组join法: 曾经
  • es6的反引号法:ES6中新增的’${a}`很好用
  • 模板引擎:解决数据变为视图的方法

使用DOM

数组join
在这里插入图片描述
Es6的反引号法
在这里插入图片描述

mustache基本使用

Mustache.render(templateStr, data)(模板字符串,数据)

mustache库机理

在这里插入图片描述

什么是tokens

  • tokens是一个JS的嵌套数组,就是模板字符串的js表示
  • 它是 ‘抽象语法树’ ‘虚拟节点’ 等的开山鼻祖
<h1>我买了一个{{thing}},好{{mood}}啊</h1>

tokens
在这里插入图片描述
当模板字符串中有循环存在时,它将被编译为嵌套更深的tokens
在这里插入图片描述

手写实现mustache

function mustacheRender(template, data) {
  // 将模板中的{{}}替换为变量占位符
  const regex = /\{\{(.+?)\}\}/g;
  template = template.replace(regex, function(match, key) {
    // 使用"."进行属性路径解析
    let value = data;
    key.split('.').forEach(prop => {
      if (value && typeof value === 'object') {
        value = value[prop];
      } else {
        // 如果路径中某个属性不存在,则返回空字符串
        value = '';
      }
    });
    return value !== undefined ? value : '';
  });

  return template;
}

// 示例用法:
const template = "Hello, {{name}}! You are {{age}} years old.";
const data = { name: 'John Doe', age: 30 };

console.log(mustacheRender(template, data)); // 输出:"Hello, John Doe! You are 30 years old."
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值