ngTable:无法读取 属性 "page"?
ngTable: Cannot read property "page"?
我正在尝试实现 ngTable 以显示来自 rest 调用的 json。在我的factory js中,我定义了http get请求获取本例所有记录的方法。
ristoreApp.factory("fmFactory", ['$http', '$window',
function ($http, $window) {
var service = {};
service.getAll = function () {
var url = SERVER + "/ristore/foundation/";
return $http({
headers: {'Authorization': 'Bearer ' + $window.localStorage.getItem("access_token")},
url: url,
method: 'GET',
crossOrigin: true
})
}
return service;
}]);
ngTable 在我的控制器 js 中设置
ristoreApp.controller("fmCtrl",
['$scope', 'fmFactory', 'NgTableParams', function($scope, fmFactory, NgTableParams) {
$scope.selection = '0';
$scope.reports = [];
$scope.fmSearch = function () {
if ($scope.selection == '0') {
fmFactory.getAll().success(function (data) {
$scope.reports = data;
$scope.tableParams = new NgTableParams({
page: 1, // show first page
count: 10 // count per page
}, {
total: $scope.reports.length, // length of data
getData: function ($defer, params) {
$defer.resolve($scope.reports.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
})
}
}
}]
)
没什么特别的,只是简单的分页,每页 10 条记录。但是,$defer.resolve()
中的方法 params.page()
出现错误 TypeError: Cannot read property 'page' of undefined
。这很奇怪。显然'page'定义在NgTableParams
的参数部分。为什么它抱怨它没有定义?
编辑:
根据 Sergii 的回答 link,我删除了 $defer 并将我的控制器 js 更改为以下内容:
ristoreApp.controller("fmCtrl",
['$scope', 'fmFactory', 'NgTableParams', function($scope, fmFactory, NgTableParams) {
$scope.selection = '0';
$scope.reports = [];
$scope.fmSearch = function () {
if ($scope.selection == '0') {
$scope.tableParams = new NgTableParams({
page: 1, // show first page
count: 10 // count per page
}, {
getData: function (params) {
return fmFactory.getAll().then(function(data) {
params.total(data.inlineCount);
return data;
});
}
});
}
}
}]
)
但除了一堆线条之外什么也没有显示。 http 调用 url 已经过测试,并且 returns 使用 rest api 测试器正确承诺。
正如我在评论中所写 params 未定义,但异常是 angular wrapped\processed,这是部分正确的异常信息的原因。
我认为出现此问题是因为您使用的是最新的 ng-table-1.0.0 library for now. If you navigate to Angular ngTableDynamic example:server-side list or Angular ngTable example:server-side list 请注意 API 加载数据已更改。
getData: function(params) {
// ajax request to api
return yourFactory.get(params.url()).$promise.then(function(data) {
params.total(data.inlineCount);
return data.results;
});
}
在你的参数 $defer 中也有不同的对象(对象是 params)。如果您尝试应用提供的解决方案,请确保您正确更改了参数:
params.url() - should be pagination filter like {page: 0, size: 10}
data.inlineCount - total elements on server side
data.results - data list from server side
我希望我的调查不仅能帮助我解决这个问题。
我正在尝试实现 ngTable 以显示来自 rest 调用的 json。在我的factory js中,我定义了http get请求获取本例所有记录的方法。
ristoreApp.factory("fmFactory", ['$http', '$window',
function ($http, $window) {
var service = {};
service.getAll = function () {
var url = SERVER + "/ristore/foundation/";
return $http({
headers: {'Authorization': 'Bearer ' + $window.localStorage.getItem("access_token")},
url: url,
method: 'GET',
crossOrigin: true
})
}
return service;
}]);
ngTable 在我的控制器 js 中设置
ristoreApp.controller("fmCtrl",
['$scope', 'fmFactory', 'NgTableParams', function($scope, fmFactory, NgTableParams) {
$scope.selection = '0';
$scope.reports = [];
$scope.fmSearch = function () {
if ($scope.selection == '0') {
fmFactory.getAll().success(function (data) {
$scope.reports = data;
$scope.tableParams = new NgTableParams({
page: 1, // show first page
count: 10 // count per page
}, {
total: $scope.reports.length, // length of data
getData: function ($defer, params) {
$defer.resolve($scope.reports.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
})
}
}
}]
)
没什么特别的,只是简单的分页,每页 10 条记录。但是,$defer.resolve()
中的方法 params.page()
出现错误 TypeError: Cannot read property 'page' of undefined
。这很奇怪。显然'page'定义在NgTableParams
的参数部分。为什么它抱怨它没有定义?
编辑:
根据 Sergii 的回答 link,我删除了 $defer 并将我的控制器 js 更改为以下内容:
ristoreApp.controller("fmCtrl",
['$scope', 'fmFactory', 'NgTableParams', function($scope, fmFactory, NgTableParams) {
$scope.selection = '0';
$scope.reports = [];
$scope.fmSearch = function () {
if ($scope.selection == '0') {
$scope.tableParams = new NgTableParams({
page: 1, // show first page
count: 10 // count per page
}, {
getData: function (params) {
return fmFactory.getAll().then(function(data) {
params.total(data.inlineCount);
return data;
});
}
});
}
}
}]
)
但除了一堆线条之外什么也没有显示。 http 调用 url 已经过测试,并且 returns 使用 rest api 测试器正确承诺。
正如我在评论中所写 params 未定义,但异常是 angular wrapped\processed,这是部分正确的异常信息的原因。
我认为出现此问题是因为您使用的是最新的 ng-table-1.0.0 library for now. If you navigate to Angular ngTableDynamic example:server-side list or Angular ngTable example:server-side list 请注意 API 加载数据已更改。
getData: function(params) {
// ajax request to api
return yourFactory.get(params.url()).$promise.then(function(data) {
params.total(data.inlineCount);
return data.results;
});
}
在你的参数 $defer 中也有不同的对象(对象是 params)。如果您尝试应用提供的解决方案,请确保您正确更改了参数:
params.url() - should be pagination filter like {page: 0, size: 10}
data.inlineCount - total elements on server side
data.results - data list from server side
我希望我的调查不仅能帮助我解决这个问题。