2013-11-21 15 views
6

AngularJS'de yeniyim ve bir hizmetten gelen ng-Tablosunu kullanırken verileri görüntülemede sıkışıp kaldım. (32 index.html: 122)TipError alıyorum: Fabrikadan veri yüklerken undefined yönteminin 'dilim' olarak adlandırılamıyor Tablo-AngularJS

i kodlanmış Nesne de tanımlanmamış ait 'dilim' yöntemi Aranamıyor $ scope.tableParams.ngTableParams.getData. Ben

TypeError bir hata alıyorum json veri değerleri gayet iyi çalışıyor. Fabrikadaki verilerin, json veri sonucundan daha fazlasını içerdiğini ve bu nedenle dilimleme problemini içerdiğini düşünüyorum.

<div class="row"> 
    <div> 
     <p>Filter: <input class="form-control" type="text" ng-model="filter.$" /></p> 

     <table ng-table="tableParams" class="table"> 
      <tr ng-repeat="user in $data"> 
       <td data-title="'Name'" sortable="name"> 
        {{user.name}} 
       </td> 
       <td data-title="'Age'" sortable="'age'"> 
        {{user.age}} 
       </td> 
      </tr> 
     </table> 
    </div> 
</div> 

cevap

4

Sen tablo içindeki $defer çözmek gerekir:

myApp.factory('userData', function($http, $log){ 
    return { 
     getUsers: function(successcb){ 
      $http({method: 'GET', url: 'api/users'}). 
       success(function(data, status, headers, config){ 
        successcb(data); 
        $log.warn(data, status, headers, config); 
       }). 
       error(function(data, status, headers, config){ 
        $log.warn(data, status, headers, config); 
       }); 
     } 
    } 
}); 

Benim HTML şudur:

myApp.controller('usersCtrl', function usersCtrl($scope, userData, $filter, ngTableParams, $log){ 

    userData.getUsers(function(users){ 
     $scope.users = users; 
    }) 

    var users = $scope.users; 

    $scope.$watch("filter.$", function() { 
     $scope.tableParams.reload(); 
    }); 

    $scope.tableParams = new ngTableParams({ 
     page: 1,   // show first page 
     count: 10,   // count per page 
     sorting: { 
      name: 'asc'  // initial sorting 
     } 
    }, { 
     getData: function($defer, params) { 
      var filteredData = $filter('filter')(users, $scope.filter); 
      var orderedData = params.sorting() ? 
           $filter('orderBy')(filteredData, params.orderBy()) : 
           filteredData; 

      $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); 
     }, 
     $scope: $scope 
    }); 

}); 

Sonra fabrika servisi şudur:

Benim kontrolör şöyle Ajax tamamlandıktan sonra getData. Şu anda beklediği gibi, filteredData'u konsola kaydettirecekseniz, undefined olacaktır, bu yüzden dilimlenemez.

için userData.getUsers taşımayı deneyin: Bu bana yardım etmedi

getData: function ($defer, params) { 
    /* make ajax call */ 
    userData.getUsers(function(users) { 
     /* now we have data to work with*/ 
     $scope.users = users; 

     var filteredData = $filter('filter')(users, $scope.filter); 
     var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : filteredData; 
     /* and can resolve table promise */ 
     $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); 

    }) 

} 
+0

o zafer; teşekkür ederim – Fergus