我正试图在angularjs"webapp"中创建一个搜索函数。当我在产品中搜索时,一切都很好,但当我更改所有内容以搜索用户时,我会收到一个错误。无法读取未定义的属性"toLowerCase"。
这是我的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时,它就停止工作了。
有什么建议吗?
很可能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;
};