你可能想通過在Javascript MDN讀了一下更多關於它們並注意稱爲標籤模板文字的部分,因爲它展示瞭如何把文字變成一個完整的模板的模板。
備案我要導入相關的部分:
標籤模板文字
模板文字的更高級形式的標籤模板文字。標籤允許您使用函數解析模板文字。標記函數的第一個參數包含一個字符串值數組。其餘的參數與表達式有關。最後,你的函數可以返回你的操縱字符串(或者它可以返回與下一個例子中描述的完全不同的東西)。用於標籤的函數名稱可以任意命名。
var person = 'Mike';
var age = 28;
function myTag(strings, personExp, ageExp) {
var str0 = strings[0]; // "that "
var str1 = strings[1]; // " is a "
// There is technically a string after
// the final expression (in our example),
// but it is empty (""), so disregard.
// var str2 = strings[2];
var ageStr;
if (ageExp > 99){
ageStr = 'centenarian';
} else {
ageStr = 'youngster';
}
return str0 + personExp + str1 + ageStr;
}
var output = myTag`that ${ person } is a ${ age }`;
console.log(output);
// that Mike is a youngster
標記函數不需要返回一個字符串,如下例所示。
function template(strings, ...keys) {
return (function(...values) {
var dict = values[values.length - 1] || {};
var result = [strings[0]];
keys.forEach(function(key, i) {
var value = Number.isInteger(key) ? values[key] : dict[key];
result.push(value, strings[i + 1]);
});
return result.join('');
});
}
var t1Closure = template`${0}${1}${0}!`;
t1Closure('Y', 'A'); // "YAY!"
var t2Closure = template`${0} ${'foo'}!`;
t2Closure('Hello', {foo: 'World'}); // "Hello World!"
這些標記的模板字面值似乎正是你想要的。
爲什麼你要在一個對象中使用字符串文字來形容詞? –
模板文字不是實際模板引擎的替代品。 –
@RobertMennell這就是問題 - 我想將對象傳遞給模板文字,而不是使用模板文字的上下文。 –