无法阅读属性&to toLowerCase'未定义的angularjs

时间:2015-12-07 08:47:53

标签: html angularjs

我试图在我的angularjs" webapp"中尝试搜索功能。当我搜索产品时一切正常,但是当我更改所有内容以便搜索到用户时,我会收到错误无法读取属性&to to ofLowerCase'未定义的。

这是我的js:

    return function(arr, searchString){
    if(!searchString){
        return arr;
    }
    var result = [];
    searchString = searchString.toLowerCase();
    angular.forEach(arr, function(item){
        if(item.title.toLowerCase().indexOf(searchString) !== -1){
            result.push(item);
        }
    });
    return result;
};
});

这就是html所谓的:

<div ng-controller="userCtrl" class="container-app">
<div class="bar">
    <input type="text" class="search" ng-model="searchString" placeholder="Enter your search terms" />
</div>
<div class="searchResultsText">
    <h2>Zoekresultaten: </h2>
</div>
<div class="searchResults" ng-repeat="user in users | searchFor:searchString">
    <a class="normal" href="#">{{user.name}}</a>
</div>

它确实显示了用户列表,只要我开始在搜索栏中输入它就会给我错误。

当我使用完全相同的功能时,它使用不同的控制器。这是2个控制器:

app.controller('customersCtrl', function ($scope, $http) {
$http.get(apiUrl + "product/list")
    .success(function (response) {
        $scope.products = response;
    });
});

app.controller('userCtrl', function ($scope, $http) {
$http.get(apiUrl + "user/list")
    .success(function (response) {
        $scope.users = response;
    });
});

所以基本上customerCtrl工作正常,但是当我将值更改为userCtrl时,它停止工作。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

最有可能item.title至少一次未定义。

return function(arr, searchString){
    if(!searchString){
        return arr;
    }
    var result = [];
    searchString = searchString.toLowerCase();
    angular.forEach(arr, function(item){
        if(
            angular.isDefined(item.title) && 
            item.title.toLowerCase().indexOf(searchString) !== -1
        ){
            result.push(item);
        }
    });
    return result;
};