Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs-Ng Tble-未定义_Javascript_Angularjs_Ngtable - Fatal编程技术网

Javascript Angularjs-Ng Tble-未定义

Javascript Angularjs-Ng Tble-未定义,javascript,angularjs,ngtable,Javascript,Angularjs,Ngtable,我在创建ngTable时遇到问题。我可以获得手动创建的数组以进行精细渲染,但当我将其连接到api时,它失败了。当然没有错误,所以我真的很困惑为什么。我得到了一个$scope.data数组,它确实像预期的那样被填充,但是新的tableParams总是以未定义告终 这是我的HTML <div ng-app="myApp" class="container-fluid" ng-controller="demoController as demo"> <div class="r

我在创建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>

$
符号似乎是错误的。您是否尝试过:

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

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

你需要使用回调函数来解决这个问题。这只是显示我数组中的数据,它实际上没有使用ng表实现。对不起,我把重点放错了。我会尝试将
$http.get
移动到
getData
函数中。也许这个例子有帮助:我已经看过了这个链接。我遇到的问题是,在运行ngtable调用之前,http/resource查询没有得到解决,因此没有任何数据可供使用。这就是为什么我将它嵌入到http调用下面的原因。这可能更优雅,但我的$scope.data定义得很好。$scope.tableParams没有定义。@Alexapeasley,如果您遵循我的解决方案,它也应该解决这个问题。让我知道如果不行,我会试一试。我现在就知道了。TypeError:dataService.DataList不是function@AlexPeasley,我想看看你的代码。最好在JSFIDLE上添加完整的代码,以便我可以检查。
$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());
      });
});
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)
  }
});