ng-table TypeError:undefined不是函数

时间:2015-11-25 06:38:51

标签: angularjs coffeescript ngtable

我正在使用旧版本的ng-tables 0.4.2,如果我升级到0.4.3,它会在我的chrome控制台中显示错误

  page = $location.search()['page'] # Get page from the URL

  # data is created by ngTableParams
  $scope.tableParams = new ngTableParams({
    page: if page then page else 1,
    count: 10,
    sorting: { invoice_no: 'desc'}
  }, {
    total: 0,
    filterDelay: 500,

    # ng-table will ask for updated data, this is where it gets it from.
    getData: ($defer, params) ->
      # Go get a list of debtors
      Invoice.query params.url(), (data) ->
        params.total($scope.total)
        $location.search(params.url()) # Params into URL
        orderedData = (if params.sorting then $filter('orderBy')(data, params.orderBy()) else data) # Sort
        $defer.resolve(orderedData) # Paginate / update table with new data
  })

以下是我配置tableParams

的方法
# ng-table will ask for updated data, this is where it gets it from.
getData: ($defer, params) ->
  $defer.resolve([{invoice_no: 1}])

我在我的模块中包含ng-tables,在我的控制器中包含ngTableParams。

更新:传递模拟数据

如果我执行以下操作则没有错误。

getData: ($defer, params) ->
  Restangular.all('invoices').getList()
  .then((data) ->
    return data
  )    

更新:使用Restangular代替角度资源工作

所以使用Restangular工作

进行查询
Invoice = ['$resource', 'apiPrefix', ($resource, apiPrefix) ->
  $resource( apiPrefix + "/invoices/:id",
    id: "@id"
  ,
    # Add update method
    update: {method: "PUT"}
  )
]

angular
  .module('paisApp')
  .factory('Invoice', Invoice)

也许在ng-table 0.4.3及以上版本中我不能再使用角度资源了?或者我只是做错了。这是我的发票资源(在ng-table 0.4.2中工作)。

{{1}}

3 个答案:

答案 0 :(得分:1)

我在这里找到答案:https://github.com/esvit/ng-table在3号。

  

已删除提供给getData方法的$ defer参数。   相反,你的getData方法应该返回一个数组或一个promise   解析为数组。

getData: ($defer, params) ->

由于这种改变,你的params var是未定义的。

迁移应该起作用的功能:

getData: (params) ->
  # Go get a list of debtors
  Invoice.query params.url(), (data) ->
    params.total($scope.total)
    $location.search(params.url()) # Params into URL
    orderedData = (if params.sorting then $filter('orderBy')(data, params.orderBy()) else data) # Sort
    orderedData

答案 1 :(得分:1)

我发现Invoice资源正在返回一个ng-tables不喜欢的类型。 ng-tables版本0.4.3期望返回$ defer对象,因此我必须将我的查询包装在defer.resolve中。现在它有效。

  $defer.resolve(
    Invoice.query params.url(), (data) ->
      orderedData = (if params.sorting then $filter('orderBy')(data, params.orderBy()) else data) # Sort
      return orderedData
  )

答案 2 :(得分:0)

首先初始化,它有效!

.controller('indexDataCtrl', function($scope, $q, NgTableParams) {

$scope.dataTable = new NgTableParams();

....

}