【问题标题】:How can I replace es6 template strings inside constants如何替换常量内的 es6 模板字符串
【发布时间】:2016-06-09 11:00:47
【问题描述】:

我有这个常数:

.constant('SOMETHING', {
   name: `${name}`,
   subject: `${surname}`,
})

当我尝试这样做时,例如 SOMETHING.name 它说它是未定义的。

任何想法如何存储模板字符串然后使用它?

非常感谢您。

【问题讨论】:

  • 不是undefined,而是"undefined" - 在您的代码中任何地方都没有name 变量。
  • 如何存储模板字符串然后使用它?”听起来像是 Defer execution for ES6 Template Strings 的副本,不是吗?
  • 与@Bergi 无关。我在问你如何在常量中使用模板文字,然后通过包含常量来使用它们。
  • 不确定这里的“使用”指的是什么。你的意思是你想用它们来定义一个常量的值,还是你的意思是你只想在以后扩展它们但将它们称为一个常量?请告诉我们您希望如何在某处“包含常量”、您期望的结果以及它们的来源。
  • @Bergi 我的意思是在我的模型中使用它,例如 SOMETHING.name 直接使用它,而无需做任何事情。显然,尽管我需要创建一个函数来替换这些 ${name} ,例如仅使用名称或仅使用 $interpolate 进行角度使用。

标签: javascript ecmascript-6 constants


【解决方案1】:

这不是 ES6 模板文字提供的功能。

es6-template 包可用于使用模板文字语法插入常规 JS 字符串。在这一点上,ES6 模板文字语法与其他模板引擎相比并没有真正的优势。

如果上下文是框架(我假设 constant 代表 AngularJS 常量服务),使用框架提供的模板工具可能会有好处,即

app.constant('SOMETHING', {
   name: '{{ name }}',
   ...
});

app.run((SOMETHING, $interpolate) => {
  let somethingName = $interpolate(SOMETHING.name)({ name: 'name' });
  ...
});

【讨论】:

  • 似乎您是对的,除非您使用您提供的内容或创建一个替换函数,将 ${} 替换为提供的值,否则无法做到这一点。非常感谢。
  • 模板文字语法很简单,所以是的,模板可以用正则表达式解析,es6-template 基本上就是这样做的。
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 2016-10-26
  • 1970-01-01
  • 2016-11-07
  • 2018-03-04
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多