2016-04-11 43 views
1

İşlev, bildiğim şeyi yukarıdan aşağıya doğru olmalıdır. Ancak bu kodda, saat getOrders işlevinden daha önce yürütülür. Kimse getOrders'ın ilk önce çalıştırılmasına izin verecek bir çözüme sahip midir?

$scope.getOrders=function() { 
     OrderService.getOrders(1) 
     .success(function (ords) { 
      if (angular.isArray(ords)) { 
       $scope.Orders = ords; 
       console.log("testing2"); 
       console.log("testing 3"+$scope.Orders); 
      } else { 
       $scope.Orders = [ords]; 
       console.log("testing"); 
      } 

      $scope.dateT = true; 
      $scope.StatusEnum = { 10: "Pending", 20: "Processing", 30: "Ready to Shipping", 40: "Cancelled" }; 

     }).error(function (error) { 
      $scope.status = 'Unable to load customer data: ' + error.message; 
      console.log($scope.status); 
     }); 
    } 
//Here edited, I got add in but still cant 
$scope.getOrders(); 
$scope.$watch('currentPage + numPerPage', function() { 

      var begin = (($scope.currentPage - 1) * $scope.numPerPage), end = begin + $scope.numPerPage; 
      //$scope.filteredTodos = $scope.Orders.slice(begin, end); 
      console.log("testing" + $scope.Orders); 
     },1); 

Ama konsolda gördüğümüz sonuç Sen eski değerine ile yeni değeri karşılaştırabilirsiniz ve farklı ise, ancak o zaman bu gibi yürütülür bu enter image description here

+0

'getOrders' nasıl çalıştırılır? – dfsq

+0

$ watch'dan önce çalıştırdım ama hala aynı. $ scope.getOrders(); $ kapsam. $ Watch ('currentPage + numPerPage', işlev() {}); ng-bind için nasıl emin olun. – kyorilys

+0

Elbette, bu beklenen bir davranış, onunla ilgili bir sorun yok. Sadece saatte veri varlığını kontrol et. – dfsq

cevap

0

gibidir:

$scope.$watch('your variable', function(newValue, oldValue){ 
    if(newValue != oldValue){ 
     //execute your code here 
    } 
    }, true); 
+0

ama daha sonra yürütmesini istiyorum. saatin çalıştırılmasından önce, getOrders() 'ın ilk – kyorilys

+1

'u çalıştırmasına izin verin, neden currentPage + numPerPage'i' başarı '(bu nedenle saat devam edecek) işlevine güncelleştirmiyorsunuz ve $ scope.total = gibi yeni bir değişken oluşturuyorsunuz currentPage + numPerPage; ve saatin içine 'toplam' koymak? –

0

Sen testing2 ve testing 3 günlük aramalarden değil, yanlış giriş yaptığınıişlevi ancak başarılı bir geri çağırma. Ayrıca, $watch işlevini günlüğe kaydetmiyorsunuz, ancak currentPage + numPerPage ifadesindeki değerler değiştiğinde yürütülen geri çağrı günlüğünü günlüğe kaydediyorsunuz. getOrders ve $watch işlevleri beklediğiniz gibi yürütülür, ancak geri arananlar bu sırayla yürütülmez. Eğer emir böyle, success geri aramasında çalıştırmak gerekir iade edildiğinde yürütmek için bazı kod istiyorsanız

: başarı hakkında @theo için

$scope.getOrders=function() { 
     OrderService.getOrders(1) 
     .success(function (ords) { 
      if (angular.isArray(ords)) { 
       $scope.Orders = ords; 
       console.log("testing2"); 
       console.log("testing 3"+$scope.Orders); 
      } else { 
       $scope.Orders = [ords]; 
       console.log("testing"); 
      } 

      $scope.dateT = true; 
      $scope.StatusEnum = { 10: "Pending", 20: "Processing", 30: "Ready to Shipping", 40: "Cancelled" }; 

      // execute some code here (I'm making it up) 
      $scope.currentPage = ords.currentPage; 
      $scope.numPerPage = ords.numPerPage; 
      // this will also trigger the watch you registered 
      // or you can do what you do in watch callback here 

     }).error(function (error) { 
      $scope.status = 'Unable to load customer data: ' + error.message; 
      console.log($scope.status); 
     }); 
    }; 
0

Thx, sadece $ kapsamını koymak $ $ seyretmek başarıya. O zaman işe yarıyor.

$scope.getOrders=function() { 
      OrderService.getOrders(1) 
      .success(function (ords) { 
       if (angular.isArray(ords)) { 
        $scope.Orders = ords; 
        console.log("testing2"); 
        console.log("testing 3"+$scope.Orders); 
       } else { 
        $scope.Orders = [ords]; 
        console.log("testing"); 
       } 

       $scope.dateT = true; 
       $scope.StatusEnum = { 10: "Pending", 20: "Processing", 30: "Ready to Shipping", 40: "Cancelled" }; 

       //Move the watch inside the success 
       $scope.$watch('currentPage + numPerPage', function() { 
        var begin = (($scope.currentPage - 1) * $scope.numPerPage), end = begin + $scope.numPerPage; 
        $scope.filteredTodos = $scope.Orders.slice(begin, end); 
        console.log("testing" + $scope.Orders); 
       }); 
      }).error(function (error) { 
       $scope.status = 'Unable to load customer data: ' + error.message; 
       console.log($scope.status); 
      }); 
     } 
+0

'getOrders' işlevini iki kez çağırırsanız ne olur? – stjepano