AngularJs在表达式中起作用

The*_*igC 12 javascript angularjs

你有没有理由选择一种技术而不是另一种?

 var items = [{val:7},{val:3},{val:4},{val:1}];
Run Code Online (Sandbox Code Playgroud)

第一:Ctrl和View

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

 <div ng-repeat="item in items">
     {{ doSomething(item.val) }}
 </div>
Run Code Online (Sandbox Code Playgroud)

第二: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>
Run Code Online (Sandbox Code Playgroud)

我通常更喜欢第二种技术(例如在http请求之后),但我想知道是否以及为什么特别优先于另一种.我知道第一种技术最终可能会在每个摘要周期(对于转发器中的每个项目)多次调用$ scope.doSomething,但我听说这与使用过滤器没有太大区别.有任何想法吗?

编辑:我最特别想知道对脏检查,摘要周期,范围手表等的影响.还有功能复杂性相关(想象一个更复杂的功能)?

Dan*_*nce 6

两者之间都没有性能差异,但在语义和清晰分离方面,没有理由使用第一种方法.这就是过滤器的设计和优化.

由于脏检查以完全相同的方式发生,因此函数的复杂性在一种方法与另一种方法之间不会有所不同.

如果您正在修改项目的值,那么您的逻辑应该绝对不在您的视图之外,即第二个示例.

  • 如果在doSomething函数中放置console.log,则每个列表项的每个摘要可以多次调用它.但是,forEach循环只运行一次(在实例化或服务器请求时).这些技术有没有根本不同的东西? (4认同)