javascript - 陷入字符串变量中的模板文字

标签 javascript node.js web

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

相关文章:

javascript - 我需要禁用输入类型 ='email' 的默认验证

python - 如何在 puppeteer 中传递实验性 chrome 选项

html - body 中所有其他元素顶部的垂直线

android - https ://www. googleapis.com/oauth2/v3/certs 中 v1、v2 和 v3 之间的区别

soap - 严重: SAAJ0120: Can't add a header when one is already present

java - 要为我的网站制作一个体面到高质量的移动版本?

javascript - 当我调度事件()时,表单元素变为空白

javascript - 如何通过 Google Chat 添加百分比标签而不更改顺序

javascript - 将数据分组到单独的列表中

node.js - 使用 Nodejs 从运行时目录在浏览器中提供文件