【问题标题】:Angular pagination filter error角度分页过滤器错误
【发布时间】:2014-06-25 19:23:12
【问题描述】:

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

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

【问题讨论】:

  • 视图中的正确语法可能是:

标签: javascript angularjs


【解决方案1】:

过滤器应始终检查其输入的有效性。输入可能是异步操作的结果,因此过滤器无法确定输入始终是它在评估时所期望的。

试试这个:

publicApp.angularModule.filter('startFrom', function () {
    return function(input, start) {
        if (!angular.isArray(input)) {
            return [];
        }
        start = +start; //parse to int
        return input.slice(start);
    };
});

【讨论】:

    【解决方案2】:

    我的猜测是您的 startFrom 过滤器采用 2 个参数,但您只传递了 1 个(currentPage*pageSize)。看看这个:

    How do I call an Angular.js filter with multiple arguments?

    我不确定为什么会间歇性地发生这种情况,但这可能是参数传递/排序问题(假设您试图用一个值填充 2 个参数)。

    【讨论】:

    • filter函数的第一个参数总是来自管道,所以startFromfilter只有一个可选的start参数。
    • 那么问题可能出在 (data | filter:leaderBoardFilter) 中,它可能会生成一个未定义的
    • 确实! data 本身也可能未定义,请查看我的答案。
    • 有道理。为你 +1
    【解决方案3】:

    需要检查输入是否存在:

    试试这个:

    app.filter('startFrom', function() {
    return function(input, start) {
        if (!input || !input.length) { return; }
        start = +start; //parse to int
        return input.slice(start);
    }
    });
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      相关资源
      最近更新 更多