如何将渲染指令的结果作为变量传递给angular-translate

时间:2017-11-17 15:32:36

标签: javascript angularjs angular-directive angular-translate

我有一个(相当复杂的)指令,可以用货币提供金额。它根据该货币的规则格式化货币(例如,如果货币具有美分等)并根据区域设置格式化数字和符号,如果金额为负等,则添加符号和类等等。

我想将指令的结果用作翻译中的变量。

有一个plunker with a simplified setup here

简而言之,我想要的是:

Your balance: <strong currency data-amount="-1337" data-symbol="'€'"></strong>
<p translate translate-values="{ currency: '€', amount: 1337, beneficiary: 'carol' }">PAY_TO</p>

翻译类似于:

var translations = {
  PAY_TO: "You must pay {{ amount }} to {{ beneficiary}}"
};

(在关键词中,关键是PAY_TO_PROPER

目标是用指令返回的格式化HTML替换{{ amount }}

请注意,在plunker中,指令是简化的,实际上它需要考虑很多事情,我真的不想添加到模板中。例如基于ISO_CODE的后备符号,根据货币确定要渲染的分数(有0,2,3,5甚至8位数的货币,以此命名;这些东西很复杂)

这种常见模式会是什么?是否将一个呈现的指令的结果作为变量以正确的方式传递给Angular,或者这是一个丑陋的黑客?

我使用翻译或指令错了吗?我很难相信这是如此困难,我找不到其他人在谷歌或stackoverflow上寻找如何做到这一点。

1 个答案:

答案 0 :(得分:1)

有一个名为translate-compile的角度转换选项,您可以使用它来编译在当前范围(https://angular-translate.github.io/docs/#/guide/05_using-translate-directive#using-translate-directive_post-compiling)的上下文中传递给转换的值。

你可以像这样使用它:

<p translate translate-values="{ amount: '<currency data-amount=\'1337\' data-symbol=&quot;\'€\'&quot;></currency>', beneficiary: 'carol' }" translate-compile>PAY_TO_PROPER</p>

请参阅随附的小提琴:http://plnkr.co/edit/IRFzWU2Qfw7zxdBNSl4L