未捕获的类型错误:无法读取 angularjs 中未定义的属性 'indexOf'


Uncaught TypeError: Cannot read property 'indexOf' of undefined in angularjs

我对编码世界很陌生,需要专家的帮助。以下是我在文件中注意到的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=[];
    }
    //======================================
});

searchTextSmallLetters 变量的值已变为未定义。首先,检查它是否可以未定义。如果是这样,请将行更改为

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

或者检查"ajax/getNations.php"上的服务是否正常工作并返回预期的输出。由于您使用了 get 请求,因此您可以使用浏览器来执行此操作(%domain%/ajax/getNations.php eg:-localhost:8080/ajax/getNations.php)

重要提示:始终最好进行验证。所以最好将行更改为

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

更改以下行以正确处理

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

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

当"searchItemsSmallLetters"未定义时,您的条件将引发此类错误。