2016-08-23 14 views
5

GetData işlevime geçirilmesi gereken parametrelerin tanımsız olduğu ng-table kullanarak bir sorunla karşılaşıyorum. AngularJS ve ng-masasında yeniyim, bu yüzden herhangi bir yardım takdir edilecektir. Aşağıdaki kodda REST'in doğrudan onları çağırarak çalıştığını doğruladım, bu yüzden sorun açısal kodum/konfigürasyonumda bir yer. Her neyse, işte benim denetleyicimin sözde bir örneğidir. Gerçek kod bir intranet üzerindedir, bu yüzden doğrudan yapıştıramıyorum, bu yüzden herhangi bir yazım hatalarını transkripsiyondan affedin. Kullanılması ng-tablo 1.0.0 ve açısal 1.5.8: Ben getData http çağrısından önce console.log ifadeleri eklediktenng-tablosunun getData işlevinde undefined get12

<table ng-table="tableParams" class="table table-condensed table-striped"> 
    <tr ng-repeat="row in data"> 
     // row stuff here 
    </tr> 
</table> 

: Burada

myApp.controller('myCtrl', ['$scope', '$http', 'NgTableParams', 
    function($scope, $http, NgTableParams) { 
    $http.get('services/data/count').success(function(data) { 
     // this works fine 
     $scope.totalRows = data.rowCount; 
    }); 
    $scope.tableParams = new NgTableParams({ 
     page: 1 
     count: 20 
    }, { 
     total: $scope.totalRows, 
     getData: function($defer, params) { 
      // this line fails with params being undefined 
      $http.get('/services/data/' + params.page() + '/' + params.count()) { 
      .success(function(data) { 
       $scope.data = data; 
       $defer.resolve(data); 
      }); 
     } 
    }); 
}]); 

Ve html ilgili parçasıdır ve paramler tanımsız olarak yazdırılıyor.

+0

Sana 'senin' $ defer' değişkeni console.log' varsa, nesneyi göreceksiniz şüpheli sen Paramların beklemesini bekliyorlardı. –

+0

Ayrıca, 'http.başarı [kullanım dışı] (https://docs.angularjs.org/api/ng/service/$http#deprecation-notice). Bunun yerine 'sonra (işlev (yanıt), işlev (rejectionReason))' kullanın. –

+0

$ defer, ihtiyacım olan değerlere sahip. Sanırım bu JS newbie'den gelen soru "neden?" Ama şimdi ileri gidebilirim. Çok teşekkürler. –

cevap

5

Üzgünüm, yorumumun kafa karıştırıcı olabileceğini fark etmedim. İşte cevabınız:

getData anahtarında yazdığınız işlev, (NgTable API tarafından) params'u temsil eden tek bir argümanın alınması varsayılır. Başka bir deyişle, işlevinize ilk bağımsız değişken, her zaman $defer adını vermiş olsanız bile, params değerlerini içerir. Ve ikinci argüman her zaman tanımsızdır (API, params adını vermiş olsanız bile, tek bir argümanla). Eğer $defer erişmek isteyen (ve bunu yapmak gibi görünüyor) Eğer

, ben size denetleyicisi (en üstündeki bağımlılık diziye '$defer' eklemek enjekte ve sonra kumandanın argüman listesine $defer eklemek gerektiğini düşünüyorum aynı pozisyonda işlevi )

Bu şekilde görünecektir:.

myApp.controller('myCtrl', ['$scope', '$http', '$defer', 'NgTableParams', 
    function($scope, $http, $defer, NgTableParams) { 
    $http.get('services/data/count').success(function(data) { 
     $scope.totalRows = data.rowCount; 
    }); 
    // ... 
    getData: function(params) { 
     $http.get('/services/data/' + params.page() + '/' + params.count()) { 
     .success(function(data) { 
      $scope.data = data; 
      $defer.resolve(data); 
     }); 
    } 
+1

, eski ng tablosunda bulunan '$ defer' idi? Ayrıca, eski versiyonun 'nTTableParams' için küçük harf kullandığını fark ettim. – dork

0

$ defer değişkeni (teşekkürler Jesse Amano!) Ihtiyacım olan değerlere sahipti. Bunun neden işe yaradığından emin değilim, ama kullanabilirim.

5

Ben de benim ng-tabloyu güncellenen bu konuda, koştum. Kodunuz, 1.0.0 sürümünden önceki sürümlerde çalışmalıdır. 1.0.0-beta.9 kodunuzu destekleyen son versiyondur. Gelen

1.0.0 change notes diyor: En getData yöntemine verilen

getData imza değişikliği

$ erteleme paramater kaldırıldı. Bunun yerine, getData yönteminiz bir diziye veya bir diziye çözüm veren bir söz vermelidir.

Daha önce

taşımak için: Şimdi

var tp = new NgTableParams({}, { getData: getData }); 

function getData($defer, params){ 
    // snip 
    $defer.resolve(yourDataArray); 
} 

:

var tp = new NgTableParams({}, { getData: getData }); 

function getData(params){ 
    // snip 
    return yourDataArrayOrPromise; 
}