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

angularjs - how to evaluate value with internal $interpolated expression

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

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

<local>key</local>

这会在翻译数据中查找 'key' 并 returns 它的值,然后用该值替换自身。所以也许键 'username' returns 值 'User Name:' 包含在页面中。

问题:我想用 "values" 支持字符串,例如键 'minLength' 具有字符串值 'The minimum length is {0} characters'。我想要如下内容:

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

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

我假设因为我用一个值替换了 'local' 标签,当 $scope.policy.minLength 实际有一个值时,实际标签不会留下来再次评估。

有人可以告诉我该怎么做吗?我已经在 $interpolate 上查找了一些东西,但我认为 <local> 标签是 replace:true 这一事实让我很难受。有什么解决办法吗?

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

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

我知道怎么做了。使用上面的例子:

  • 获取密钥和任何 <val> 标签的文本内容。
  • 调用翻译服务以检索添加了 <val> 内容的格式字符串(用于密钥)。该值将是 "The minimum length is {{policy.minLength}} characters".
  • 创建一个 $watch。 'current value function' 部分在上面的值上创建一个 $interpolate() ,然后在当前范围的上下文中对其进行评估。
  • <span> 替换原来的 <local> 标签(即相当于 'replace:true')
  • 每当 $watch 的值发生变化时,只需将 <span> 的 textContent 替换为新值。