自定义过滤器提供"无法读取属性'切片'未定义"在AngularJS中

时间:2014-09-08 11:40:43

标签: javascript angularjs pagination angularjs-ng-repeat

我的自定义startFrom过滤器给了我一个错误。

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

app.controller("PostCtrl", function($scope, $http) {
$scope.currentPage = 0;
$scope.pageSize = 10;
$scope.hidePagination = true;

$scope.search = function() {
    $http.get('someurl').then(sucesscalback,errorcalback);
    function sucesscalback(response)
    {
        $scope.hidePagination = false;
        console.log("Success:");
        console.log(response.data.records);
        $scope.posts = response.data;
        $scope.numberOfPages=Math.ceil($scope.posts.records.length/$scope.pageSize); 
        alert($scope.numberOfPages);
    }
    function errorcalback(failure)
    {
        console.log("Error:");
        console.log(failure);
    }

1 个答案:

答案 0 :(得分:48)

您的过滤器需要检查输入是否存在:

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

否则,过滤器函数将运行,因此在slice上调用undefinedslice没有$digest属性,就像数组或字符串一样。

在没有值的情况下调用过滤器的原因是因为当Angular运行其第一个if周期时,过滤器将运行。您可以通过在控制器中添加初始值来避免错误,但最好只将{{1}}语句添加到过滤器。

Here's a demo of both solutions.请注意,没有错误。