AngularJS - 通过ng-click传递$ index或项目本身?

时间:2014-04-25 04:20:11

标签: angularjs scope

说我有

<div ng-repeat="item in scope.allItems">
   <div ng-click="doSomething(...)"></div>
</div>

如果我想在点击时使用item做某事,哪一个是更好的选择?

选项1

使用ng-click="doSomething($index)并拥有:

$scope.doSomething = function($index) {
    var myItem = $scope.allItems[$index];
}

选项2

使用ng-click="doSomething(item)并拥有:

$scope.doSomething = function(myItem) {
    // Do whatever
}

2 个答案:

答案 0 :(得分:2)

如果您只是对该项执行某些操作,请将其传入。这样,该函数无需知道该项所属的数组:

$scope.addColor = function(car) {
  car.color = 'red';
};

另一方面,如果你需要修改数组,我更喜欢传入$ index并且不必循环遍历数组寻找匹配:

$scope.deleteCar = function(index, cars) {
  cars.splice(index, 1);
};

答案 1 :(得分:1)

如果要对scope.allItems使用过滤器,请使用选项2 - 因为使用过滤器会更改元素$ index。 如果不使用过滤器,则可以使用选项1。 恕我直言选项2比选项1更容易和有用,所以我已经使用选项2。