我的$scope
中有一个服务实例,并在ng-repeat
在控制器中:
$scope.svc = MyService;
在模板中:
<tr ng-repeat="items in svc.getAll()">
<!-- ... -->
<td><button ng-click="svc.remove($index)">X</button></td>
</tr>
它很方便,因此我可以直接将ng-click
指向服务方法,而不需要愚蠢的包装器。但是并没有使Angular引擎的工作效率低于它绑定到数组的效果吗?我跟踪了get
次来电,每次$scope
次更改都会触发2次。它并不多,但可能存在以这种方式使用ng-repeat
的任何奇怪的陷阱?
答案 0 :(得分:1)
不,不应该有任何真正的性能影响。由于数据绑定,重复中的大多数资源都是必需的。
但是直接使用数组时也会进行数据绑定。它是直接包含还是由函数返回并不重要。唯一的开销应该是函数调用和数组的返回,但这可以忽略不计。
但是,我建议不要将服务直接绑定到控制器,这是不好的做法。考虑您在模板中多次使用服务函数,然后您决定重命名该函数 - 您还必须多次更改它,而不仅仅是在适当的包装函数中更改一次。此外,您将自动将所有服务功能公开给模板,尽管您可能只需要一个子集(即如果您有一个初始化函数,在控制器中调用,您很可能不希望在模板中再次调用它)。