Пользовательский фильтр дает "Невозможно прочитать" срез "свойства 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
в фильтр.
Здесь представлена демонстрация обоих решений. Заметьте, что ошибок нет.