2016-07-28 2 views
2

Я использую angularJs и я использую эту функцию в моем контроллере, чтобы получить данные из базы данныхмне нужно вызвать функцию, когда предыдущая функцию закончило

this.callServer = function callServer(criteria) { 
    ctrl.searchParameters = criteria; 
    ctrl.isLoading = true; 
    var start = $scope.itemsPerPage * ($scope.currentPage - 1); 
    var limit = $scope.itemsPerPage; 
    service.getRandomsItems(criteria, start, limit).then(
     function(result) { 
      var remainder = $scope.totalItems % $scope.itemsPerPage 
      if (remainder > 0) 
       $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage) + 1; 
      else 
       $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage); 

      ctrl.displayed = result.randomsItems; 
      $scope.totalItems = result.total; 
      ctrl.isLoading = false; 
     }); 
    }; 
} 

и я называю эту функцию в моем контроллере тоже обрабатывать пейджинговой проблема

$scope.pageChanged = function(currentPage) { 
    $scope.currentPage = currentPage; 
    ctrl.callServer($scope.criteria); 
} 

Как вы можете видеть, моя функция возвращает callServer ctrl.displayed который строки, которые отображаются на текущей странице

Теперь я хочу работать с новой страницы, так Я назвал ctrl.callServer, чтобы получить новую страницу, то я назвал ctrl.selectCurrentPage() так же, как тот

$scope.pageChanged = function(currentPage) { 
    $scope.currentPage = currentPage; 
    ctrl.callServer($scope.criteria); 
    ctrl.selectCurrentPage() // I want this function to be called when ctrl.callServer($scope.criteria) is finished 
} 

где

ctrl.selectCurrentPage = function() { 
    ctrl.selection.push(this.displayed[i].userId); 
    ctrl.selectionRow.push(this.displayed[i]); 
} 

в простом английском языке, я хочу ctrl.selectCurrentPage называться, когда ctrl.callServer является finsih и получить новые данные , но этого не произойдет.

ответ

0

Просто вернуть обещание из callServer и использовать его в pageChanged.

Первый шаг:

this.callServer = function callServer(criteria) { 
    ctrl.searchParameters = criteria; 
    ctrl.isLoading = true; 
    var start = $scope.itemsPerPage * ($scope.currentPage - 1); 
    var limit = $scope.itemsPerPage; 

    return service.getRandomsItems(criteria, start, limit).then(function(result) { 
     var remainder = $scope.totalItems % $scope.itemsPerPage 
     if (remainder > 0) 
      $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage) + 1; 
     else 
      $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage); 

     ctrl.displayed = result.randomsItems; 
     $scope.totalItems = result.total; 
     ctrl.isLoading = false; 
    }); 
}; 

Тогда:

$scope.pageChanged = function(currentPage) { 
    $scope.currentPage = currentPage; 
    ctrl.callServer($scope.criteria).then(function() { 
     ctrl.selectCurrentPage(); 
    }); 
} 

Try, чтобы избежать обратного вызова ад. Прочтите the article за полезную информацию.

+0

это работает спасибо :) вы очень ..... –

+0

@BelalOthman Cool :) –

0

передать его как обратный вызов;

this.callServer = function callServer(criteria, callback) { 
          ctrl.searchParameters = criteria; 
          ctrl.isLoading = true; 
          var start = $scope.itemsPerPage * ($scope.currentPage - 1); 
          var limit = $scope.itemsPerPage; 
          service.getRandomsItems(criteria, start, limit).then(
              function(result) { 
               var remainder = $scope.totalItems % $scope.itemsPerPage 
               if (remainder > 0) 
                $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage) + 1; 
               else 
                $scope.numPages = parseInt($scope.totalItems/$scope.itemsPerPage); 
               ctrl.displayed = result.randomsItems; 
               $scope.totalItems = result.total; 
               ctrl.isLoading = false; 
               callback(); 
              }); 
         }; 

        } ]); 



$scope.pageChanged = function(currentPage) { 

        $scope.currentPage = currentPage; 
        ctrl.callServer($scope.criteria, ctrl.selectCurrentPage); 
       } 
+0

спасибо за помощь :) –

+0

добро пожаловать;) –

Смежные вопросы