我正在尝试使用ngTables使用AJAX调用对数据进行排序和过滤。目前我能够使用ng-repeat复制数据,但我的排序功能都不适用。我引用了这个示例http://plnkr.co/edit/zuzcma?p=info,并且能够使用mock.js文件使其工作,但是现在我正在使用我加载到我的网络服务器上的文件,我似乎无法让它工作
我确信答案很简单,感谢任何帮助。我附加了我的标记,以显示我的控制器和html文件的样子。谢谢大家,如果您需要更多信息,请告诉我们!
以下是我引用的API的一些链接。
http://bazalt-cms.com/ng-table/
http://bazalt-cms.com/ng-table/example/6
HTML:
<div ng-controller="myController">
<table ng-table="tableParams" show-filter="true" class="table table-condensed">
<tr ng-repeat="user in data">
<td data-title="foo" sortable="foo">{{user.foo}}</td>
<td data-title="bar" sortable="bar">{{user.bar}}</td>
</tr>
</table>
</div>
控制器:
var app = angular.module('app', ['ngTable']);
app.controller('myController', function($scope, $http, $filter, ngTableParams) {
$http.get('http://jsondata.com/myjson.json')
.success(function(data, status) {
$scope.data = data;
});
$scope.tableParams = new ngTableParams({
page: 1, // show first page
count: 10, // count per page
sorting: {
foo: 'asc' // initial sorting
}
}, {
total: data.length, // length of data
getData: function($defer, params) {
// use build-in angular filter
var orderedData = params.sorting() ?
$filter('orderBy')(data, params.orderBy()) :
data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
});
答案 0 :(得分:17)
问题在于您使用ngTableParams
内的局部变量数据,同时您不在success
函数的范围内。
更改您的代码:
var app = angular.module('app', ['ngTable']);
app.controller('myController', function($scope, $http, $filter, ngTableParams) {
$http.get('http://jsondata.com/myjson.json')
.success(function(data, status) {
$scope.data = 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()));
}
});
});
});
查看data
内$scope.data
到ngTableParams
的变化。
提示:如果您只是将ngTableParams
放入success
功能,那么也可以将data
更改为$scope.data
。但是,如果您想要reload()
表格,更改变量将为您提供更好的灵活性。
答案 1 :(得分:2)
var app = angular.module('app', ['ngTable']);
app.controller('myController', function($scope, $http, $filter, ngTableParams) {
$scope.tableParams = new ngTableParams({
page: 1, // show first page
count: 10, // count per page
sorting: {
foo: 'asc' // initial sorting
}
}, {
total: data.length, // length of data
getData: function($defer, params) {
$http.get('http://jsondata.com/myjson.json')
.success(function(data, status) {
// use build-in angular filter
var orderedData = params.sorting() ?
$filter('orderBy')(data, params.orderBy()) :
data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
});
}
});
});
答案 2 :(得分:1)
第一步是在可排序属性周围加上引号:
<td data-title="foo" sortable="'foo'">{{user.foo}}</td>
ngTable需要一个表达式。
第二步是检查您正在使用的ngTable版本,如果是0.3.2,请查看此ngTable问题:https://github.com/esvit/ng-table/issues/204
祝你好运)
答案 3 :(得分:0)
<tr ng-repeat="user in $data">
<td data-title="foo" sortable="foo">{{user.foo}}</td>
<td data-title="bar" sortable="bar">{{user.bar}}</td>
</tr>
您可以直接引用js中的数据,而不需要$scope.data = data
。
我试过并为我工作得很好。