如何在Angular JS中使用Grails Message代码标记

时间:2015-01-22 23:06:06

标签: angularjs grails gsp

我有一个加载.GSP模板的自定义指令,即

在我的指示中我有

template: '/view/pages/dummy.gsp'

在dummy.gsp中,

我有一个如下所示的复选框:

<input type="checkbox" name="orangeFruit"> Orange </input>

现在在这里,而不是使用硬编码的橙色,我想使用这样的东西:

<div ng-repeat="thisfruit in fruits">
<input type="checkbox" name="{{thisfruit}}chkbox">
    ${message(code:'label.{{thisfruit}}')}
</input>
</div>

上面的代码片段是我的角度模板,我在其中迭代水果列表并为每一个添加复选框。

fruits:["orange","apple","banana"] is the angular JSON object.

其中{{thisfruit}}是Javascript对象,其值为橙色。

以下是我的messages.properties文件的样子:

label.orange=Orange
label.apple=Apple
label.banana=Banana

当我运行上面的消息代码时,它总是给我&#34; label.orange&#34;而不是&#34; orange&#34;。我在messages.properties文件中有这个键,所以它应该找到它。 当我用label.{{thisfruit}}替换label.orange时,它会给出正确的值。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

根本不可能,这是人们常常感到困惑的最常见问题。您基本上是尝试使用客户端javascript或角度代码修复服务器端GSP或Groovy代码。

GSP文件在服务器端进行编译而不是在浏览器中进行编译,因此它不会像{{thisfruit}}那样永远不会在服务器端编译任何角度代码。

类似地,当GSP被编译成HTML代码时,它将被转换为HTML代码,浏览器可以理解如何渲染它,并在那里执行角度代码。

因此,当它在客户端呈现时,没有像${message(code:'label.{{thisfruit}}')}那样的代码可用,因为它在渲染之前已经在服务器端进行了编译。

因此,您无法在客户端(角度)代码中使用服务器端(Grails)消息代码。

那么你可以使用一个非常棒的客户端库来实现角度。 http://angular-translate.github.io/

检查出来。