只运行一次的过滤器?

时间:2014-03-24 21:38:57

标签: angularjs angularjs-filter

我制作了一个用翻译代替键的过滤器。

<label>{{'city' | translate}}</label>

过滤器只是在json文件中查找键city并返回值。

我没有意识到过滤器运行了很多。经过一些研究后,我发现有更好的方法可以做到这一点,但我不愿意做一个完整的重构。

我怎样才能简单地告诉这个过滤器每个键只运行一次。

作为一种解决方法,我正在预编译模板并使用正确的字符串替换对translate的调用。这适用于大多数情况,但有些地方的关键是动态的,或者翻译是一个将范围变量作为参数的函数

<label>{{'greeting' | translate:firstName:lastName}}</label>

我希望Angular能够一次性替换这些,而不再考虑它。

2 个答案:

答案 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>