2013-11-21 7 views
6

से डेटा लोड करते समय अपरिभाषित की विधि 'स्लाइस' को कॉल नहीं कर सकता मैं एंगुलरजेएस में नया हूं और सेवा से आने वाले एनजी-टेबल का उपयोग करते समय डेटा प्रदर्शित करने में फंस गया हूं। वस्तु पर अपरिभाषित की 'slice' विधि कॉल नहीं कर सकता $ scope.tableParams.ngTableParams.getData। (Index.html: 122: 32)मुझे टाइपरर मिल रहा है: फैक्टरी एनजी-टेबल एंगुलरजेएस

जब मैं हार्ड-कोडेड मैं एक त्रुटि

लेखन त्रुटि हो रही है जेसन डेटा मान यह ठीक काम करता है। मुझे लगता है कि कारखाने के आंकड़ों में सिर्फ जेसन डेटा परिणाम से अधिक है, इसलिए स्लाइसिंग के साथ समस्या है।

<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> 

उत्तर

4

आप तालिका के अंदर $defer को हल करने की जरूरत है:

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); 
       }); 
     } 
    } 
}); 

मेरे एचटीएमएल यह है:

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 
    }); 

}); 

तब मेरे कारखाने सेवा यह है:

मेरे नियंत्रक इस तरह दिखता है AJAX पूरा होने के बाद getData। चूंकि यह अभी खड़ा है यदि आप filteredData को कंसोल पर लॉग इन करना चाहते हैं, तो यह अनिर्धारित होगा, इस प्रकार इसे काटा नहीं जा सकता है।

करने के लिए userData.getUsers चलती का प्रयास करें:

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

ओ महिमा इस मुझे बाहर करने में मदद की थी; धन्यवाद – Fergus

संबंधित मुद्दे