AngularJS评估插值表达式而不打印到屏幕

时间:2012-08-11 21:01:55

标签: angularjs

我有一个昂贵的函数调用,每个循环调用一次,但我想将它的返回值设置为一个临时变量,可以在循环中直接使用。

这可以通过设置{{ val=fn(...) }}来实现,但它也会打印到屏幕上。是否可以在不打印值的情况下执行此操作?

我尝试过使用一组花括号{},但它不起作用。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

您是否查看了“过滤器”或者可能在JS代码而不是视图中进行工作?

答案 1 :(得分:1)

而不是临时变量,在需要值时调用方法,并且在此方法中,使用结果的缓存版本,或者如果缓存版本为null / undefined,则调用昂贵的方法。它只会在每次迭代时调用一次昂贵的函数,如果不需要它就不会调用它。除非您愿意,否则不会打印它。因为ng-repeat的每次迭代都会生成一个新的范围,所以每次迭代都将以空缓存开始。

e.g:

$scope.cache = null
$scope.getValue = function() {
  if (!this.cache) { // use typeof if 0 or false or empty string is valid!
    this.cache = myExpensiveFunc()
  }
  return this.cache
}

不是100%确定$ scope.cache = null将针对每个迭代范围进行初始化,您可能需要检查getValue中的'this'hasOwnProperty'cache'。因此,在您看来,您只需在需要时引用getValue()。

HTH!

编辑:缓存在范围上,而不是在控制器中。