2017-05-04 124 views
1

如何得到像这样的效果?字符串与模板,动态变量

name = 'Mark'; 
template = 'Your name is {{name}}'; 
console.log(template); // return "Your name is Mark"; 
name = 'John'; 
console.log(template); // return "Your name is John" 

如何为字符串制作某种简单的模板系统?也许函数会找到一些标签(例如{{}}),并用当前变量替换文本内部?或者一些在JS中构建的方法?

+1

没有必要做一个,它已经存在〜https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals – Phil

+0

@Phil:您可以在这个小提琴测试一下模板字符串与此不同,其中模板字符串本身可以是用户定义的任何内容。 –

+0

公平点,模板文字是不是插补引擎 – Phil

回答

2

我创建了一个非常简化模板功能,如果你真的需要它是动态的。我不建议使用这种用于生产现场,因为有像车把,胡子,灰尘等的模板引擎,但是这可能会为你工作。 https://jsfiddle.net/vw6av0am/

function templateMe(template, obj) { 
    var regex = /{{(.*?)}}/g; 
    return template.replace(regex, function(match, capture) { 
    return obj[capture] || ""; 
    }); 
} 

var template = 'Your name is {{name}}'; 
var obj = { 
    name: "Mark" 
}; 

var output = templateMe(template, obj); 
console.log(output); 
+0

如果任何人的兴趣,我做了更新,以允许在你传递的对象嵌套的属性:https://jsfiddle.net/vw6av0am/1/ – jas7457

+0

太好了,谢谢!!! – norr

2

尝试胡子。 https://mustache.github.io/mustache.5.html

典型的模板看起来像这样:

Hello {{name}} 
You have just won {{value}} dollars! 

相同的(定制模板)可使用的反应以及可以实现,但反应在使用单{}花括号JavaScript代码。这允许你适合围绕你的(模板)组件的逻辑。他们可以重复使用各种视图。