Angular js -在删除元素后更新ng-repeat list



元素删除工作正常。问题是ng-repeat不会自动更新自己。(我必须刷新页面以反映更改。)

 <tr ng-repeat="error in filterErrors=(latestErrors
 | filter:{ Source:SearchSource} ) 
 | orderBy:predicate:reverse
 | filter:{ ErrorId:SearchErrorId,Application:SearchApplication} 
 | startFrom:currentPage*pageSize| limitTo: pageSize">
                <td ><input type="checkbox" ng-model="error.checked" ng-click="deletingIsReady()"/></td>
                <td >{{error.Host}}</td>
                <th >{{error.Type}}</th>
                <th >{{error.Source}}</th>
            </tr>
服务:

 errorReporter.factory('dataService', function ($http,$q) {

    var _deleteErrors = function (arrayOfErrors) {
        var deferred3 = $q.defer();
        var dataString = {
            arrayOfErrors: arrayOfErrors
        }
        $http.post(ROOT + 'Home/DeleteErrors', dataString, { cache: false }).
           then(function (data, status, headers, config) {
               deferred3.resolve();
           }, function () {
               deferred3.reject();
           });
        return deferred3.promise;
    }
return {
    getLatestErrors: _getLatestErrors,
    }

});控制器功能:

dataService.deleteErrors(arrayOfErrors).then(function () {
            var elementId=0;
            angular.forEach($scope.filterErrors, function (object) {
                elementId++;
                angular.forEach(arrayOfErrors, function (obj,index) {
                    if (object.ErrorId == obj)
                    {
                         console.log($scope.filterErrors.length);
                            $scope.filterErrors.splice(elementId, 1);
                        console.log($scope.filterErrors.length);
                    }
                })
            });
        })

切片工作良好,我在控制台日志,例如100,99 .注意控制台日志几行以上,但无论如何,我的ng-repeat不更新。

您可以将JavaScript长度属性重置为比之前少1,并且它应该更新。例如,如果你在一个有5个键的数组上重复(无论它们是字符串还是对象),在你删除其中一个键后,将数组长度设置为4。

var array = [
    {value: 'value1', label: 'Value 1'},
    {value: 'value2', label: 'Value 2'},
    {value: 'value3', label: 'Value 3'},
    {value: 'value4', label: 'Value 4'},
    {value: 'value5', label: 'Value 5'}
];   
var originalLength = array.length; // will equal 5
// Loop through and delete value3:
for (var i = 0; i < array.length; i++) {
    if (array[i].value === 'value3') {
        delete array[i];
    }
}
// Reset the array length manually:
array.length = originalLength - 1;

最新更新