我有一个模板 <code>Hello, ${user.name}</code>
存储在一个变量中。我正在使用 fs.read
从外部文件读取此文件.
现在,很明显,当我附加到目标 div 的 innerHTML 时,它会按原样显示字符串,而不是按预期显示“Hello, James”(假设 user.name = James)。
有办法实现吗?
extfile.txt =>
{"A":"`Welcome, ${user.name}`"}
Node.js 代码 =>
fs.readFile(__dirname + '/extfile.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
} else {
let x = JSON.parse(data);
socket.emit('var',x.A);
}
});
HTML =>
socket.on('var',function(x)){
getElementById('target').innerHTML = x;
}
最佳答案
我稍微重写了一个解决方案 here .
此处,eval_template
评估作为常规字符串提供的 ES6 模板字符串。模板字符串中使用的局部范围内的任何变量都需要作为第二个参数中传递的对象的属性提供(因为使用 Function
创建的函数在全局范围内,无法访问局部变量)。
这非常接近于使用 eval
。您可能希望选择不同的方法来处理模板字符串。 ES6 模板字符串被设计成一种创建字符串文字的运行时机制,而不是一种模板可以存储和重用的模板语言。
function eval_template(s, params) {
return Function(...Object.keys(params), "return " + s)
(...Object.values(params));
}
const template = "`Welcome, ${user.name}`";
console.log(eval_template(template, {user: {name: "James"}}));
没有理由不能将其与标记的模板字符串一起使用,只要标记作为参数传入即可:
eval_template("tag`${boo}`", {tag, boo});
关于javascript - 陷入字符串变量中的模板文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071779/