2015-12-07 4 views
3

Я пытаюсь выполнить функцию поиска в моем angularjs «webapp». Когда я ищу в продуктах все работает нормально, но когда я меняю все так, чтобы он искал пользователей, я получаю сообщение об ошибке. Не могу прочитать свойство «toLowerCase» неопределенного.Невозможно прочитать свойство «toLowerCase» неопределенных угловых символов

Вот мои ЯШИ:

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> 

он показывает мне список пользователей, как только я начинаю печатать в строке поиска это дает мне ошибку.

, когда я использую ту же функцию, с другим контроллером, он работает. Вот два контроллера:

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, он перестает работать.

любые предложения?

+2

Ваш поискString может быть пустым – Sajeetharan

+0

Как это может быть null? это точно такая же функция ... –

ответ

3

Скорее всего, 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; 
}; 
+0

это исправляет ошибку, за исключением того, что она не возвращает результаты –

+0

ah, в этом случае поставьте 'console.log (item);' в цикле, чтобы проверить, что возвращается, потому что элемент не имеет атрибута title. :) – Pjetr

+1

Ты мужчина, я должен прочитать каждую строку кода вслух ... спасибо, что это работает. –

Смежные вопросы