一尘不染

模板文字被困在字符串变量中

node.js

我有一个模板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;
}

阅读 193

收藏
2020-07-07

共1个答案

一尘不染

我稍微重写了这里介绍的解决方案。

在此,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});
2020-07-07