0

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

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

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

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

4

2 回答 2

1

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

于 2012-08-11T21:07:42.800 回答
1

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

例如:

$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()。

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

于 2012-08-11T22:53:58.707 回答