0

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

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

<local>key</local>

这会在翻译数据中查找“键”并返回其值,然后将其自身替换为该值。所以也许键“用户名”返回值“用户名:”以包含在页面中。

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

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

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

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

有人可以告诉我如何做到这一点吗?我已经在 $interpolate 上查找了一些东西,但我认为<local>标签是 replace:true 的事实让我很生气。任何想法如何解决它?

4

2 回答 2

0

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

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

于 2016-01-11T01:31:45.130 回答
0

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

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