如何从angularJs模型中删除对象?

时间:2015-02-19 11:48:24

标签: angularjs

我正在尝试编写一个函数,使我能够在单击按钮时删除项目。我的ng-repeat如下:

<tr ng-repeat="x in myData.List">
            <td>{{x.name}}</td>
            <td>{{x.item}}</td>                
            <td><button type="submit" ng-click="delete(x.id)" class="button">Remove</button></td>
        </tr>

我的删除功能是:

$scope.delete = function (id) {            
     var index = $scope.myData.List.indexOf(id);
     $scope.myData.List.splice(index,1);               
};

但问题是它删除了最后一个对象。但我想删除一个特定的项目。我该怎么办?

3 个答案:

答案 0 :(得分:4)

您应该在x中使用id代替.indexOf

$scope.delete = function (x) {            
     var index = $scope.myData.List.indexOf(x);
     $scope.myData.List.splice(index,1);               
};

<button type="submit" ng-click="delete(x)" class="button">Remove</button>

答案 1 :(得分:3)

这不是特定角度的问题。 Array Splice是相关的JavaScript数组操作。仅传递索引x而不是x.id。所以你的HTML代码将是......

<td><button type="submit" ng-click="delete(x)" class="button">Remove</button></td>

$scope.delete = function (x) {            
     var index = $scope.myData.List.indexOf(x);
     $scope.myData.List.splice(index,1);               
};

答案 2 :(得分:1)

问题是你的myData.List是一个对象而不是ids的集合。 您需要搜索id

$scope.delete = function (id) {            
  var index=-1;
  for(;index<$scope.myData.List.length;index++){
   if($scope.myData.List.id===id)
     break;
  }
  if(index!==-1){
   $scope.myData.List.splice(index,1);               
  }
}

或者你可以将对象传递给Nicolai发布的功能