mustache

vue源码学习

什么是模板引擎

将数据要变为试图最优雅的解决方案

历史上出现过数据变为视图的方法

  • 纯DOM

  • 数组join法

  • ES6的反引号法

    新增的 ${a}的语法糖

  • 模板引擎

数组join法

//换行一样
var message='fanfan'
var str=[
    '<li>',
    '<div>'+message+'</div>',
    '</li>'
].join()

ES6的语法糖

let a='fanfan'
list.innerHTTML+=`
	<li>
		<div class="fanfan">
				${a}的信息
		</div>
	</li>
`

mustache库

{{ }} 像胡子 所以取名叫胡子

  var user = { name: "Olive", age: 23, sex: "girl" };
        var template = "My name is  {{name}} ,I'm  {{age}} ,Sex is {{sex}}";
        var view = Mustache.render(template, user)

   console.log(view);

简单模式下正则表达式可以实现

 var template = "My name is  {{name}} ,I'm  {{age}} ,Sex is {{sex}}";
    
            console.log(template.replace(/\{\{(\w+)\}\}/g,function(a,b,c){
                console.log(a,b,c);
                return '❤'
            }));

/**
	b 找出了里面的内容 可以用来替换
	{{name}} name 12
	{{age}} age 27
	{{sex}} sex 43
 	My name is  ❤ ,I'm  ❤ ,Sex is ❤*/
 
//进行函数封装
function likerender(template,data)
            {
                return template.replace(/\{\{(\w+)\}\}/g,function(findstr,$1){
                //匹配data对象里面的属性
                return data[$1]
                     });
            }

            var data={
                name:'fanfan',
                age:18,
                sex:'man'
            }

            console.log(likerender(template,data));
		
//My name is  fanfan ,I'm  18 ,Sex is man