我制作了一个用翻译代替键的过滤器。
<label>{{'city' | translate}}</label>
过滤器只是在json文件中查找键city
并返回值。
我没有意识到过滤器运行了很多。经过一些研究后,我发现有更好的方法可以做到这一点,但我不愿意做一个完整的重构。
我怎样才能简单地告诉这个过滤器每个键只运行一次。
作为一种解决方法,我正在预编译模板并使用正确的字符串替换对translate
的调用。这适用于大多数情况,但有些地方的关键是动态的,或者翻译是一个将范围变量作为参数的函数
<label>{{'greeting' | translate:firstName:lastName}}</label>
我希望Angular能够一次性替换这些,而不再考虑它。
答案 0 :(得分:3)
在将对象值返回到视图之前对其进行翻译:
$scope.city = city.$translate();
这样,每次重新加载模板或ng-repeat
<label>{{city}}</label>
答案 1 :(得分:1)
我希望Angular能够一次性替换这些,而不再考虑它。
这有点模棱两可。如果范围变量发生变化怎么办?您是否希望过滤器每次更改时都运行?或者你的意思是,当首次编译DOM时,范围变量的值应该传递给过滤器,评估并静态设置为DOM?如果是后者,我建议angular-bindonce,它提供从范围到DOM的无视绑定。
将模块添加为应用程序的依赖项后,标记将如下所示:
<label bo-text="city|translate"</label>