角度分页过滤器错误

时间:2014-06-25 19:23:13

标签: javascript angularjs

我有用于分页的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);

有趣的是,我大部分时间都会收到错误,但并非总是如此。 我怎样才能解决这个问题 ?

3 个答案:

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

希望它的工作......干杯..