2016-07-31 90 views
1

我想用ng-table實現服務器端表。但是當我使用getData時,它或者說是$defer.resolve is not a functionparams is not definedngTable - 服務器端分頁getData錯誤

如果$defer未在getData函數中使用,我可以得到params

這是我的代碼的一部分:

angular.module('ngTableTest', ['ui.router', 'ngTable']) 
.controller('Table', function($state, NgTableParams){ 
    var vm = this; 

    vm.niceTable = new NgTableParams({}, { 
     getData: function($defer, params) { 
     $http.get('/app/getdata') 
      .success(function(data) { 
       params.total(data.count); 
       $defer.resolve(data.data); 
      }); 
     } 
     }); 
}); 

謝謝!

回答

0

你HOULD包括$ Q使用$推遲 試試這個

angular.module('ngTableTest', ['ui.router', 'ngTable']) 
.controller('Table', function($state, $q, NgTableParams){ 
    var vm = this; 

    vm.niceTable = new NgTableParams({}, { 
     getData: function(params) { 
     var deferred = $q.defer(); 
     $http.get('/app/getdata') 
      .success(function(data) { 
       params.total(data.count); 
       deferred.resolve(data.data); 
      }); 
     } 
     }); 
}); 
+0

那麼,固定'params'錯誤,但它不會顯示錶中返回的數據。 – Bill

0

我用同樣的問題掙扎,這裏是我的解決方案:

angular.module('ngTableTest', ['ui.router', 'ngTable']) 
.controller('Table', function($state, $q, NgTableParams){ 
    var vm = this; 

    vm.niceTable = new NgTableParams({}, { 

    getData: function(params) { 

     var promise = 
      $http.get('/app/getdata') 
      .success(function(data) { 
       params.total(data.count); 

       // here you can do some data manipulation 
       return $q.resolve(data); // this can be skipped if no data manipulation is required 
      }); 
      } 
     }); 
     return $q.resolve(promise); 
}); 

請注意NgTable的當前版本,getdata只有一個參數,只有params,早些時候是兩個,$ defer和params。

似乎getdata需要返回一個已解決的承諾。在這個問題中,承諾在成功方法中得到了解決,但不是直接在getdata方法中解決。

無論如何,這是一個可行的解決方案,但只有通過反覆試驗才能達成解決方案。我希望一些專家瞭解$ q.resolve的工作方式和getdata函數如何返回值。