7

我从eslint得到prefer-template错误。对于解决办法,我改变了我的代码以使用require函数嵌套在url函数内部如下内模板字符串:如何在ES6中嵌套模板字符串?

{ 
    background: `url(${require(`../../assets/${edge.node.name.toLowerCase()}.png` center no-repeat`)}) 
} 

然而,这给了一个错误,很明显。这是我之前使用的代码,在require函数内连接了一个加号,而不是模板字符串。

{ 
    background: `url(${require('../../assets/' + edge.node.name.toLowerCase() + '.png')}) center no-repeat` 
} 

是否可以定义嵌套的模板字符串?

回答

12

是的,这是可能的,但你不得不出于某种原因把)})部分(即关闭require调用,插值和CSS url)在错误的地方:

{ 
    background: `url(${require(`../../assets/${edge.node.name.toLowerCase()}.png`)}) center no-repeat` 
//                    ^^^ 
} 

也就是说,这可能是一个糟糕的主意,因为它不会使代码可读。最好使用一个变量:

const bgurl = require(`../../assets/${edge.node.name.toLowerCase()}.png`); 
… { 
    background: `url(${bgurl}) center no-repeat` 
} 
+0

感谢您的回复。这是我演示的错误。但是,当我将它改为'url($ {require('../../ assets/$ {edge.node.name.toLowerCase()}。png'))center no-repeat'时,这是一个语法错误。 – lvarayut

+0

@LVarayut:[Worksforme](http://babeljs.io/repl/#?evaluate=true&presets=es2015&code=const%20x%20%3D%20 {%0A%20%20background%3A%20%60url%28 %24 {需要%28%60%.. .. 2F%2Fassets%2F%24 {edge.node.name.toLowerCase%28%29} png格式%60%29}%29%20center%20no重复%60 %0A}%3B)。你到底在做什么错误? – Bergi

+0

谢谢@Bergi。我对花括号感到困惑。顺便说一句,我会用你的第二种方法。 – lvarayut