2016-02-09 51 views
1

我有一个模板字符串:模板字符串存储为常数

function getTemplateString() { 
    let videoId = 'qwerty' 
    return `https://player.vimeo.com/video/${videoId}?api=1` 
} 

我想存储在const而不是这个模板字符串:

const VIMEO_EMBED_URL = `https://player.vimeo.com/video/${videoId}?api=1` 

function getTemplateString() { 
    let videoId = 'qwerty' 
    // how can I do this next line? 
    return VIMEO_EMBED_URL.something({videoId: videoId}) 
} 

我可以做常量字符串插值?

+0

我猜不是:[“模板字符串中的所有字符串替换是JavaScript表达式”](https://developers.google.com/web/updates/2015/01/ES6-Template-Strings?hl=zh-CN ) – sennett

回答

2

模板字符串不能存储,它们在定义时返回一个字符串。所以我想你正在寻找RegExp

function getTemplateString (url, value) { 
    return url.replace(/\${video1}/g, value) 
} 

其他选项可能是应用该模板的功能:

function getTemplateString (videoId) { 
    return `https://player.vimeo.com/video/${videoId}?api=1` 
} 
1

注意背部剔引号嵌套在正规的报价。

const VIMEO_EMBED_URL = "`https://player.vimeo.com/video/${videoId}?api=1`"; 
 

 
function getTemplateString() { 
 
    let videoId = 'qwerty'; 
 
    return eval(VIMEO_EMBED_URL); 
 
} 
 

 
document.write(getTemplateString());

据我了解,eval许多用途,可能包括这一个,不建议使用。 (它们引入了可能的安全问题等)。但是,eval是该语言的一部分,有些JavaScript专家偶尔会讨论如何使用它。

该答案确实解决了问题中提出的问题,确实允许编码人员将模板字符串的方便语法与将其存储在const中的持久性相结合。只要明白它是“用户当心”。