我有用于分页的Angular过滤器(我使用了这个link as tutorial):
publicApp.angularModule.filter('startFrom', function () {
return function(input, start) {
start = +start; //parse to int
return input.slice(start);
};
});
我的HTML的相关部分如下所示:
<div data-ng-repeat="item in filteredData = ( data | filter:leaderBoardFilter) | startFrom:currentPage*pageSize | limitTo:pageSize">
即使一切正常并且正如预期的那样,我在控制台中收到此错误:
"Error: input is undefined
@http://localhost:1936/MadbarzScripts/Public/PublicMain.js:8:9
错误是引用此行:
return input.slice(start);
有趣的是,我大部分时间都会收到错误,但并非总是如此。 我怎样才能解决这个问题 ?
答案 0 :(得分:3)
过滤器应始终检查其输入的有效性。输入可能是异步操作的结果,因此过滤器无法确保输入始终是它在评估时所期望的。
试试这个:
publicApp.angularModule.filter('startFrom', function () {
return function(input, start) {
if (!angular.isArray(input)) {
return [];
}
start = +start; //parse to int
return input.slice(start);
};
});
答案 1 :(得分:1)
我的猜测是你的startFrom过滤器有两个参数,但你只传递了1个(currentPage * pageSize)。看看这个:
How do I call an Angular.js filter with multiple arguments?
我不确定为什么会间歇性地发生这种情况,但这可能是一个参数传递/排序怪癖(假设你试图用一个值填充2个参数)。
答案 2 :(得分:1)
需要检查输入是否存在:
试试这个:
app.filter('startFrom', function() {
return function(input, start) {
if (!input || !input.length) { return; }
start = +start; //parse to int
return input.slice(start);
}
});
希望它的工作......干杯..