javascript - 自定义过滤器在 AngularJS 中给出 "Cannot read property ' 切片' of undefined"

标签 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);
    }

最佳答案

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

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

否则,过滤器函数将运行并因此在 undefined 上调用 slice,它没有 slice 的属性,如数组或字符串。

过滤器在没有值时被调用的原因是过滤器将在 Angular 运行其第一个 $digest 循环时运行。您可以通过在 Controller 中添加初始值来避免错误,但最好只将 if 语句添加到过滤器。

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

关于javascript - 自定义过滤器在 AngularJS 中给出 "Cannot read property ' 切片' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723455/

相关文章:

javascript - AngularJS - ui-bootstrap 分页。隐藏单页按钮

Wordpress 分页 - 分页返回空页

javascript - 允许 javascript 函数接受任意数量的参数

javascript - Nodejs与C++程序通信?

javascript - AJAX调用后JS未执行

javascript - 在 ng-repeat 中使用变量

javascript - React 组件不会渲染;只看到 data-reactid =".0"

javascript - 作用域之间的双向数据绑定(bind)

javascript - AngularJS - 共享服务对象被错误删除

php - 如何使用分页将 MYSQL 中的一系列日期值显示到 php 中的表格中?