我读过一篇关于使用 scopes 的一些 AngularJS 陷阱的文章,它指出你不应该在表达式中使用函数,而且我知道每次框架认为需要时都会评估表达式(这可能会发生很多)一遍又一遍地调用昂贵的函数是低效的。但是,如果该函数仅基于已加载到作用域中的值进行一些计算怎么办?例如,假设我有一个具有 3 个不同属性的范围,并且某些状态是由这些属性值的组合决定的。我可以在函数中计算该状态:
$scope.state = function() {
return prop1 && prop2 && prop3;
};
并从表达式中调用该函数。另一种方法是在每次更改每个属性时调用该函数,以便缓存状态值:
$scope.prop1 = someValue;
$scope.state = getState();
...
$scope.prop2 = someOtherValue;
$scope.state = getState();
...
$scope.prop3 = yetAnotherValue;
$scope.state = getState();
在这种情况下,直接从表达式中调用函数真的那么糟糕吗?如果是这样,是缓存计算值的唯一替代方法,可能在许多不同的地方,还是我缺少其他方法?