使用Splice()获取正确的索引

时间:2013-03-19 20:52:54

标签: php jquery arrays angularjs splice

我正在尝试从AngularJS视图中删除项目。从这个角度来看,我正在通过指数&身份证。在JS控制器中,我从AngularJS数组/模型中 splice(index)。我将ID传递给 $ http.get 以调用对我的数据库的删除。一切正常。

...

直到我提出刷新页面的请求。我每5秒发出一次更新Angular模型的请求,并将任何新数据连接到它。但我发现它会搞砸我的索引值。我以为它正在重新排序我的索引:阅读this StackOverflow thread帮助确认了这一点。

我会在页面上为第3个项目推送删除,并从数据库中删除该ID。但是在我刷新页面之前它会从页面拼接错误的项目。 如何确保我始终传递正确的索引?

查看

<li ng-repeat="new in news | filter:query | orderBy:orderProp">
     <div class="newsitem" id="newspost{{new.id}}">
         <h4 ng-model="news.title">{{new.title}} </h4>
         <p ng-model="news.text">{{new.text}}</p>
         <a class="btn btn-info" ng-click="visible = true">View article</a>
         <a ng-click="deleteNews(index,new.id)" class="btn btn-danger btn-mini">Delete</a>
     </div>
</li>

controllers.js

$scope.deleteNews = function(index, id) {
    $http.get('/ci/index.php/news/delete_news_ajax/'+id).success(function(){
        $scope.news.splice(index, 1);
    });
};

1 个答案:

答案 0 :(得分:3)

传递new

,而不是传递索引和ID
<a ng-click="deleteNews(new)" ...>

然后在控制器功能中使用indexOf

$scope.deleteNews = function(newsItem) {
   $http.get('/ci/index.php/news/delete_news_ajax/' + newsItem.id)).success(function() {
      $scope.news.splice($scope.news.indexOf(newsItem), 1);
   });
}