Пользовательский фильтр дает "Невозможно прочитать" срез "свойства undefined" в AngularJS

Мой пользовательский фильтр 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

Ваш фильтр должен проверить, существует ли вход:

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

В противном случае функция фильтра будет запущена и, таким образом, вызовет slice on undefined, который не имеет свойства slice, как это делает массив или строка.

Причина, по которой фильтр вызывается, пока нет значения, потому что фильтр будет работать, когда Angular запускает свой первый цикл $digest. Вы можете избежать ошибки, добавив начальное значение в контроллер, но лучше всего добавить оператор if в фильтр.

Здесь представлена ​​демонстрация обоих решений. Заметьте, что ошибок нет.