Javascript Angularjs-Ng Tble-未定义
我在创建ngTable时遇到问题。我可以获得手动创建的数组以进行精细渲染,但当我将其连接到api时,它失败了。当然没有错误,所以我真的很困惑为什么。我得到了一个$scope.data数组,它确实像预期的那样被填充,但是新的tableParams总是以未定义告终 这是我的HTMLJavascript 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
<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)
}
});