2017-03-10 34 views
0

我在创建ngTable时遇到问题。我可以获取手动创建的数组来渲染,但是当我将它钩到我的api时,它会失败。当然没有错误,所以我很困惑为什么。我得到一个$ scope.data数组并没有像预期的那样得到填充,但新的tableParams总是以undefined结束。Angularjs - Ng-Tble - 未定义

这里是我的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())); 
         } 
        }); 
      });` 
+0

你需要使用回调函数来解决这个问题 –

回答

0

的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) 
    } 
}); 
+0

这可能会更优雅,但我的$ scope.data是定义好的。 $ scope.tableParams没有定义。 –

+0

@AlexPeasley,如果你遵循我的解决方案,它也应该解决这个问题。让我知道如果没有 –

+0

好吧,我会给它一个镜头。 –

0

$标志似乎是错误的。您是否尝试过:

<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()); 
     }); 
}); 
+0

这只是显示在我的阵列中的数据,它没有实际使用的NG-表实现 –

+0

对不起,我把重点放在了错误的事情。我会尝试将'$ http.get'移动到'getData'函数中。也许这个例子有助于:http://ng-table.com/#/loading/overview – smonusbonus

+0

我看过这个和这个链接。 http://ng-table.com/#/loading/demo-external-array。我在那里遇到的问题是,在运行ngtable调用之前,http /资源查询没有解决,因此没有任何数据要使用。这就是为什么我将它嵌入http呼叫之下的原因。 –