Angular在ng-repeat中传递错误的对象(MEAN-Stack)

时间:2016-03-15 13:02:05

标签: javascript angularjs web-services rest mean-stack

我正在建立一个平台来管理我所在的考试。我使用MEAN-Stack。

除了删除“klausur”(德语考试)外,一切正常。守则如下。如果我点击表格的任何对象上的最后一个链接(使用“deleteKlausur(klausur)”点击),而不是瞬间对象,但我的表格中删除了我的最后一个链接。在DB内部,删除正确的一个。如果我再次单击相同的按钮,服务器会崩溃,因为它尝试再次删除相同的ID,给我一个关于null对象的问题。

<table class="table table-hover table-striped">
            <thead>
            <th>ID</th>
            <th>Name</th>
            <th>Datum</th>
            <th>Semester</th>
            <th>Aufgabenzahl</th>
            <th>Teilnehmer</th>
            <th>Aktionen</th>
            </thead>
            <tbody>
            <tr ng-repeat="klausur in klausuren">
                <td>{{klausur._id}}</td>
                <td>{{klausur.name}}</td>
                <td>{{klausur.gehaltenAm | date:'dd.MM.yy'}}
                    <br/>{{klausur.gehaltenAm | date:'H:mm'}}
                </td>
                <td>{{klausur.semester}}</td>
                <td>{{klausur.aufgaben.length}}</td>
                <td>{{klausur.teilnehmer.length}}</td>
                <td><a href="#/klausuren/{{klausur._id}}/edit" class="btn btn-default" style="width:100%">Klausur
                    ändern</a><br/>
                    <a href="" ng-click="deleteKlausur(klausur)" class="btn btn-danger" style="width:100%">Klausur löschen</a></td>
            </tr>
            </tbody>

我的JS(使用Angular)脚本如下:

app.controller('KlausurListController', function ($scope, $http) {
$http.get('http://localhost:3000/klausuren').success(function (response) {
    $scope.klausuren = response;
}).error(function (err) {
    $scope.error = err;
});

$scope.deleteKlausur = function (klausur) {
    $http.delete('http://localhost:3000/klausuren/'+ klausur._id).success(function(res){
        $scope.klausuren.pop(klausur);
    });
}});

谢谢你,甚至读完整件事!希望你能帮忙!

1 个答案:

答案 0 :(得分:2)

您正在使用pop(),它只删除数组中的最后一个元素。

要删除正确的数据,您需要在数组中找到它的索引并使用splice()

$scope.deleteKlausur = function (klausur) {
    $http.delete('http://localhost:3000/klausuren/'+ klausur._id).success(function(res){
        var index = $scope.klausuren.indexOf(klausur);
        if(index !== -1){
           $scope.klausuren.splice(index,1);
        }            
    });
}});