Angularjs - Ng-Tble - 未定义

Angularjs - Ng-Tble - Not Defined

我在创建 ngTable 时遇到问题。我可以获得手动创建的数组以呈现良好的效果,但是当我将其连接到我的 api 时,它会失败。当然没有错误,所以我真的很困惑为什么。我得到一个 $scope.data 数组确实按预期填充,但新的 tableParams 总是未定义。

这是我的 HTML

<div ng-app="myApp" class="container-fluid" ng-controller="demoController as demo">
    <div class="row">
        <div class="col-xs-12">
            <h2 class="page-header">Pharmacy Rebate Portal</h2>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6">
            <h3>Default configuration</h3>
            <table ng-table="demo.tableParams" class="table table-condensed table-bordered table-striped">
                <tr ng-repeat="row in $data">
                    <td data-title="'Manufacturer'">{{row.manufacturer | uppercase }} </td>

                </tr>
            </table>
        </div>

    </div>
</div>

我正在使用这个版本的 ngTable。与 1.6.3 Angular 一起。有任何想法吗?

https://unpkg.com/ng-table/bundles/ng-table.min.js

$http.get('/api/rebates').
            then(function (response) {
                $scope.data = response.data;
                $scope.tableParams = new NgTableParams({
                    page: 1,            // show first page
                    count: 10,          // count per page
                    sorting: {
                        foo: 'asc'     // initial sorting
                    }
                }, {
                        total: $scope.data.length, // length of data
                        getData: function ($defer, params) {
                            // use build-in angular filter
                            var orderedData = params.sorting() ?
                                $filter('orderBy')($scope.data, params.orderBy()) :
                                $scope.data;

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

$ 符号似乎是错误的。你试过了吗:

<tr ng-repeat="row in demo.data">

编辑:

还没有测试过,但我认为这是可行的方法:

$scope.tableParams = new NgTableParams({
  page: 1,
  count: 10,         
  sorting: {
    foo: 'asc'
  }
}, 
{
  getData: function(params) {
    return $http.get('/api/rebates')
      .then(function(response) {
        var orderedData = params.sorting() ?
                          $filter('orderBy')($scope.data, params.orderBy()) :        
                          $scope.data;

        return orderedData.slice((params.page() - 1) * params.count(),  
                                 params.page() * params.count());
      });
});

JavaScript 总是同步的。所以这里发生了什么,$scope.data=response;$http.get('/api/rebates')... 完成之前执行。这意味着,$scope.data 未定义。为了解决这个问题,我建议使用服务。

var myApp = angular.module('myApp', []);
  myApp.controller('AppCtrl', ['$scope', '$http', function($scope, dataService){

  dataService.dataLists(function(response) {
    console.log(response.data);
    $scope.data=response.data;
    $scope.tableParams = new NgTableParams({
                    page: 1,            // show first page
                    count: 10,          // count per page
                    sorting: {
                        foo: 'asc'     // initial sorting
                    }
                }, {
                        total: $scope.data.length, // length of data
                        getData: function ($defer, params) {
                            // use build-in angular filter
                            var orderedData = params.sorting() ?
                                $filter('orderBy')($scope.data, params.orderBy()) :
                                $scope.data;

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

});
}])

myApp.service('dataService', function($http) {
    this.dataLists = function(callback){
   $http.get('/api/rebates').then(callback)
  }
});