2016-02-19 2 views
0

Я очень новичок в мире кодирования и нуждаюсь в помощи экспертов. Ниже ошибка angularJs я заметил в файле: Ошибка на который указывает на это:Uncaught TypeError: Невозможно прочитать свойство indexOf неопределенного в angularjs

if(searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 

Ваша помощь будет оценена. Я пытаюсь дать пользователю предложение на основе ключа, который вводит пользователь.

var app = angular.module('app',[]); 
app.controller('autoCompleteCTRL', function($scope, $rootScope,$http){ 
     $rootScope.searchItems = []; 
    var arr= getCountries(); // Load all countries with capitals 
    function getCountries(){ 
    $http.get("ajax/getCountries.php").success(function(data){ 
      for(var i=0;i<data.length;i++) 
     { 
      $rootScope.searchItems.push(data[i].bvl_area); 
     } 

     return $rootScope.searchItems; 
     }); 
    }; 
    //Sort Array 
    $rootScope.searchItems.sort(); 
    //Define Suggestions List 
    $rootScope.suggestions = []; 
    //Define Selected Suggestion Item 
    $rootScope.selectedIndex = -1; 

    //Function To Call On ng-change 
    $rootScope.search = function(){ 
     $rootScope.suggestions = []; 
     var myMaxSuggestionListLength = 0; 
     for(var i=0; i<$rootScope.searchItems.length; i++){ 
      var searchItemsSmallLetters = angular.lowercase($rootScope.searchItems[i]); 
      var searchTextSmallLetters = angular.lowercase($scope.searchText); 
      if(searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 
       $rootScope.suggestions.push(searchItemsSmallLetters); 
       myMaxSuggestionListLength += 1; 
       if(myMaxSuggestionListLength == 5){ 
        break; 
       } 
      } 
     } 
    } 

    //Keep Track Of Search Text Value During The Selection From The Suggestions List 
    $rootScope.$watch('selectedIndex',function(val){ 
     if(val !== -1) { 
      $scope.searchText = $rootScope.suggestions[$rootScope.selectedIndex]; 
     } 
    }); 


    //Text Field Events 
    //Function To Call on ng-keydown 
    $rootScope.checkKeyDown = function(event){ 
     if(event.keyCode === 40){//down key, increment selectedIndex 
      event.preventDefault(); 
      if($rootScope.selectedIndex+1 !== $rootScope.suggestions.length){ 
       $rootScope.selectedIndex++; 
      } 
     }else if(event.keyCode === 38){ //up key, decrement selectedIndex 
      event.preventDefault(); 
      if($rootScope.selectedIndex-1 !== -1){ 
       $rootScope.selectedIndex--; 
      } 
     }else if(event.keyCode === 13){ //enter key, empty suggestions array 
      event.preventDefault(); 
      $rootScope.suggestions = []; 
     } 
    } 
    //Function To Call on ng-keyup 
    $rootScope.checkKeyUp = function(event){ 
     if(event.keyCode !== 8 || event.keyCode !== 46){//delete or backspace 
      if($scope.searchText == ""){ 
       $rootScope.suggestions = []; 
      } 
     } 
    } 
    //====================================== 

    //List Item Events 
    //Function To Call on ng-click 
    $rootScope.AssignValueAndHide = function(index){ 
     $scope.searchText = $rootScope.suggestions[index]; 
     $rootScope.suggestions=[]; 
    } 
    //====================================== 

}); 
+0

ваш 'searchItemsSmallLetters' приходит как неопределенные .. Проверьте значения поступают правильно .. –

+0

вы можете использовать console.log ($ rootScope.searchItems) в http.get и ваш цикл? Является ли $ rootScope.searchItems неопределенным для некоторой ситуации, если (searchItemsSmallLetters) работает. В противном случае вам нужно будет проверить вашу услугу –

+0

Спасибо Anoop LL –

ответ

0

Значение searchTextSmallLetters переменная стала неопределенной. Сначала вы проверяете, может ли он быть неопределенным. Если так измените строку

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 

либо проверить службу на «АЯКС/getCountries.php» работает и возвращает ожидаемый результат. Поскольку вы используете запрос получения, вы можете использовать браузер для этого (% domain%/ajax/getCountries.php, например: -localhost: 8080/ajax/getCountries.php)

Важно: всегда полезно делать проверки. Так что это хорошо, чтобы изменить строку

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 
+0

Я нашел ошибку, она была в моем сервисе. Спасибо за помощь –

0

Изменение ниже линии для правильной работы

if(searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 

Для

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){ 

Когда "searchItemsSmallLetters" не определено, то ваше состояние будет бросать такую ​​ошибку.

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