angularjs - 如何使用内部$ interpolated表达式计算值

时间:2016-01-11 01:25:00

标签: angularjs angularjs-directive angularjs-interpolate

我正在寻找有关如何执行以下操作的建议:

我有一个'翻译'服务,可以将密钥转换为字符串(用于本地化)。指令'local'调用它。它看起来像这样:

<local>key</local>

这会在翻译数据中查找“键”并返回其值,然后将其替换为值。所以也许键'username'会返回值'User Name:'以包含在页面中。

问题:我想支持带有“值”的字符串,例如键'minLength'的字符串值为'最小长度为{0}个字符'。我想要以下内容:

<local>
  <key>minLength</key>
  <val>{{policy.minLength}}</val>
</local>

在评估<local>标记时(在其链接阶段)尚未设置$ scope.policy的值时,我遇到了问题。

我假设因为我用一个值替换'local'标签,所以当$ scope.policy.minLength实际上有一个值时,实际的标签不会再次被评估。

有人可以告诉我这是怎么做到的吗?我在$ interpo上查找了一些东西,但我认为<local>标签是替换的事实:true在这里杀了我。任何想法如何解决它?

2 个答案:

答案 0 :(得分:0)

您应该将指令设置为 transclude ,并使用built指令来控制内部语句的评估。

看看这是否有帮助: https://docs.angularjs.org/api/ng/directive/ngTransclude

答案 1 :(得分:0)

我想出了如何做到这一点。使用上面的例子:

  • 获取密钥和任何<val>标记的文本内容。
  • 调用翻译服务以检索添加了<val>内容的格式字符串(对于密钥)。该值将为“最小长度为{{policy.minLength}}个字符”。
  • 制作$ watch。 '当前值函数'部分在上面的值上创建$ interpolate(),然后在当前范围的上下文中对其进行评估。
  • 将原始<local>标记替换为<span>(即相当于'replace:true')
  • 每当$ watch的值发生变化时,只需将<span>的textContent替换为新值即可。