Piy*_*dey 2 javascript node.js web
我有一个模板
存储在变量中。我正在使用读取来自外部文件的内容Hello, ${user.name}
fs.read
。
现在,很明显,当我附加到目标div的innerHTML时,它按原样显示字符串,而不是按预期方式显示“ Hello,James”(假设user.name = James)。
有办法实现吗?
extfile.txt => {"A":"`Welcome, ${user.name}`"}
Node.js代码=>
fs.readFile(__ dirname +'/extfile.txt','utf8',函数(err,data){ 如果(错误){ 返回console.log(err); }其他{ 让x = JSON.parse(data); socket.emit('var',xA); } });
HTML =>
socket.on('var',function(x)){ getElementById('target')。innerHTML = x; }
小智 5
我稍微重写了这里介绍的解决方案。
在此,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"}}));
Run Code Online (Sandbox Code Playgroud)
只要将标签作为参数传递,就没有理由不能将其与带标签的模板字符串一起使用:
eval_template("tag`${boo}`", {tag, boo});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2372 次 |
最近记录: |