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

Javascript 被困在字符串变量中的模板文字,javascript,node.js,web,Javascript,Node.js,Web,我有一个模板Hello,${user.name}存储在一个变量中。我正在使用fs.read从外部文件读取此文件 现在,很明显,当我附加到目标div的innerHTML时,它会按原样显示字符串,而不是按预期显示“Hello,James”(假设user.name=James)。 有没有办法让它发生 extfile.txt=>{“A”:“`欢迎,${user.name}`”} Node.js代码=> fs.readFile(__dirname + '/extfile.txt', 'utf8', fun

我有一个模板
Hello,${user.name}
存储在一个变量中。我正在使用
fs.read
从外部文件读取此文件

现在,很明显,当我附加到目标div的innerHTML时,它会按原样显示字符串,而不是按预期显示“Hello,James”(假设user.name=James)。
有没有办法让它发生

extfile.txt=>
{“A”:“`欢迎,${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); } }); readFile(uuu dirname+'/extfile.txt',utf8',函数(err,data){ 如果(错误){ 返回console.log(err); }否则{ 设x=JSON.parse(数据); socket.emit('var',x.A.); } }); HTML=>

socket.on('var',function(x)){ getElementById('target').innerHTML = x; } socket.on('var',函数(x)){ getElementById('target')。innerHTML=x;
} 模板文本需要
$
,而不是符号。此外,请记住使用反勾号而不是引号

我稍微重写了一个解决方案

这里,
eval_template
计算作为常规字符串提供的ES6模板字符串。模板字符串中使用的局部范围内的任何变量都需要作为在第二个参数中传递的对象的属性提供(因为使用
Function
创建的函数位于全局范围内,无法访问局部变量)

这与使用
eval
非常接近。您可能希望选择不同的方法来处理模板字符串。ES6模板字符串被设计成一种运行时机制来创建字符串文本,而不是一种模板可以存储和重用的模板语言

function eval_模板(s,params){
返回函数(…对象键(参数),“返回”+s)
(…对象值(参数));
}
const template=“`Welcome,${user.name}`”;

log(eval_模板(模板,{user:{name:{James}}))有时当我在另一个文件中有标签变量时,我也会遇到这个问题,这些标签应该有一个模板文本。在这种情况下,我通常使用变通方法来模拟这种行为(以此代码为指导:D)

labels.js:

export default:{
    labelWithSpeudoliteral: "text to {{change}}"
}
MyHelper.js:

    generateLiteral(s, params) {
        const entries = Object.entries(params);
        let sentence = s;
        entries.forEach((entry) => {
                const literal = `{{${entry[0]}}}`
                sentence = sentence.replace(literal, entry[1]);
            }
        )
        return sentence;
    }
现在,在我的代码中,我以以下方式使用此帮助器:

console.log(generateLiteral(labels.labelWithSpeudoliteral, {'change': 'literal'})
标签的结果应为:

text to literal

正如您可以看到的那样,使用{{}}符号作为标记,generateLiteral()使用它们和接收到的参数来使用模板文本更改文本值。这不是最好的方法,但我希望它能帮助您。

您使用`字符作为模板文字,而不是“您使用的是什么模板机制?JavaScript模板文字?如果是这样,它将是
Hello,${user.name}
并且它将不起作用,因为模板文字是编译时,而不是运行时。@cartant”编译时"? JS被解释为。。。每次创建模板文本时,都会计算模板参数evaluated@rookie您能否向我们展示更完整的JS/HTML来演示您正在尝试做的事情?这个问题可能会帮助您: