你有没有理由选择一种技术而不是另一种?
var items = [{val:7},{val:3},{val:4},{val:1}];
首先:Ctrl和View
$scope.doSomething = function(val){
return val + 10;
};
<div ng-repeat="item in items">
{{ doSomething(item.val) }}
</div>
第二:Ctrl和View
angular.forEach(items,function(item){
item.val = item.val + 10;
//item.valAlso = item.val + 10; Or in case you want to preserve model
});
<div ng-repeat="item in items">
{{ item.val }}
</div>
我通常更喜欢第二种技术(例如在http请求之后),但我想知道是否以及为什么特别优于另一种。我知道第一种技术最终可能会在每个摘要周期(对于转发器中的每个项目)多次调用$ scope.doSomething,但我听说这与使用过滤器没有太大区别。有什么想法吗?
编辑:我最特别想知道对脏检查,摘要周期,范围监视等的影响。还有功能复杂性相关(想象一个更复杂的功能)?
答案 0 :(得分:6)
两者之间都没有性能差异,但在语义和清晰分离方面,没有理由使用第一种方法。这就是过滤器的设计和优化。
函数的复杂性在一种方法与另一种方法之间不会有所不同,因为脏检查以完全相同的方式发生。
如果你正在修改项目的价值,那么你的逻辑肯定会被排除在你的观点之外,即第二个例子。