在AngularJS中,自定义过滤器出现“无法读取未定义的'slice'属性”的错误。

16

我自定义的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个回答

50

您的筛选器需要检查输入是否存在:

app.filter('startFrom', function() {
    return function(input, start) {
        if (!input || !input.length) { return; }
        start = +start; //parse to int
        return input.slice(start);
    }
});
否则,过滤函数会运行并因此在未定义的情况下调用slice,这不像数组或字符串那样具有slice属性。
过滤器在没有值时被调用的原因是因为当Angular运行其第一个$digest周期时,过滤器将运行。您可以通过在控制器中添加初始值来避免错误,但最好只需向过滤器添加if语句。 这里有两种解决方案的演示文稿。 请注意,没有错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接