Javascript 表达式中的AngularJs函数

Javascript 表达式中的AngularJs函数,javascript,angularjs,Javascript,Angularjs,你有什么理由选择一种技术而不是另一种 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> angular.forEach(

你有什么理由选择一种技术而不是另一种

 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>
 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>
$scope.doSomething=函数(val){
返回val+10;
};
{{doSomething(item.val)}
第二:Ctrl和View

 $scope.doSomething = function(val){
     return val + 10;
 };

 <div ng-repeat="item in items">
     {{ doSomething(item.val) }}
 </div>
 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>
angular.forEach(项目、功能(项目){
item.val=item.val+10;
//item.val还=item.val+10;或者如果要保留模型
});
{{item.val}}
我通常更喜欢第二种技术(例如在http请求之后),但我想知道一种技术是否以及为什么特别优于另一种。我知道第一种技术可能会在每个摘要周期(对于中继器中的每个项目)多次调用$scope.doSomething,但我听到过这样的论点:这与使用过滤器没有太大区别。有什么想法吗


编辑:我特别想知道对脏检查、摘要周期、范围监视等的影响。功能复杂性是否与之相关(想象一个更复杂的功能)?

两者都不会有性能差异,但在语义和干净分离方面,没有理由使用第一种方法。这就是过滤器设计和优化的目的

函数的复杂性在不同的方法之间不会有所不同,因为脏检查的发生方式完全相同


如果您正在修改项的值,那么您的逻辑肯定不应该出现在您的视图中,即第二个示例。

如果您将console.log放在函数doSomething中,则每个列表项的每个摘要都可以多次调用它。但是,forEach循环只运行一次(在实例化或服务器请求时)。这两种技术不是有本质上的不同吗?这两种技术都有自己的位置,重要的是价值为什么会改变。如果视图显示“如果您有10个以上的土豆,您将有…”,则为显示目的调整控制器或模型中土豆的当前数量是错误的,因为这会使值不正确。创建一个名为future Potations的新属性或在显示点调整值都可以。但是,如果后端接收的值需要调整以正确反映其含义,则应在那里而不是在视图中进行调整。@Chandermani您能详细说明您的答案吗?我的错,我在想其他事情:(无所谓