Typeahead TypeError: b.toLowerCase () не является функцией - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь взять данные из службы весенней загрузки и использовать для заполнения в Typeahead.

Когда я начинаю печатать в текстовом поле, я получаю эту ошибку

enter image description here

HTML

<input autocomplete="off" type="text" 
    ng-model="loadStopForm.stop" name="typeahead-2" 
        data-provide="typeahead" class="typeahead-2 form-control">

Код контроллера

$.get(serviceCompanyAll, function(data) {

    $('.typeahead-2').typeahead({
       source: data
    });

}, 'json');

Данные: 01, Данные, которые не работают - см. Данные: 02, которые работают нормально.

[  
{  
  "@type":"CR",
  "companyId":1819,
  "companyCode":"NVX",
  "legalName":"Navex",
  "dbaName":"Navex Inc.",
  "formation":"P",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":{  
     "personId":2,
     "category":null,
     "firstName":"Arthur",
     "middleName":"Parho",
     "lastName":"Benjiman",
     "dob":null,
     "addresses":null,
     "contacts":null,
     "fullName":"Benjiman, Arthur"
  },
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"CR",
     "value":"Carrier"
  },
  "locations":[  
     {  
        "id":1821,
        "landmark":"4104 Banner Dr.",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"4104 Banner Dr.",
        "street2":null,
        "city":"Houston",
        "state":"TX",
        "zip":"77550",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  

        ],
        "action":0
     }
  ],
  "mcNumber":"124578",
  "dotunitSeries":"111",
  "billingMethod":null,
  "businessName":"Navex"
}, {  
  "@type":"SH",
  "companyId":1824,
  "companyCode":null,
  "legalName":null,
  "dbaName":null,
  "formation":"I",
  "firstName":"Sikandar",
  "middleName":"",
  "lastName":"Ali",
  "dob":"05/01/2018",
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":124578963,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"SH",
     "value":"Shipper"
  },
  "locations":[  
     {  
        "id":1825,
        "landmark":"2202 Jennifer St",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"2202 Jennifer St",
        "street2":null,
        "city":"Dallas",
        "state":"TX",
        "zip":"77880",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  
           {  
              "id":1826,
              "medium":{  
                 "code":"EM",
                 "value":"Email"
              },
              "serviceLocator":"sikandarali744@gmail.com",
              "prefered":true,
              "action":0
           }
        ],
        "action":0
     }
  ],
  "dotunitSeries":null,
  "billingMethod":null,
  "mcNumber":null,
  "businessName":"Ali, Sikandar"
 },
 {  
  "@type":"TS",
  "companyId":1827,
  "companyCode":"",
  "legalName":"Wayis",
  "dbaName":"",
  "formation":"C",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"TS",
     "value":"Truck Stop"
  },
  "locations":[  
     {  
        "id":1828,
        "landmark":"2001 Ravi St",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"2001 Ravi St",
        "street2":null,
        "city":"Dallas",
        "state":"HI",
        "zip":"12345",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  

        ],
        "action":0
     }
  ],
  "dotunitSeries":null,
  "billingMethod":null,
  "mcNumber":null,
  "businessName":"Wayis"
}, {  
  "@type":"BR",
  "companyId":1871,
  "companyCode":"",
  "legalName":"E2 Financial",
  "dbaName":"E2F",
  "formation":"C",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":false,
  "business":{  
     "code":"BR",
     "value":"Broker"
  },
  "locations":null,
  "mcNumber":"124578",
  "billingMethod":"MCS",
  "dotunitSeries":null,
  "businessName":"E2 Financial"
}
]

Данные: 02, эти данные отлично работают:

[
  {
    "name": "Ethel Price",
    "gender": "female",
    "company": "Enersol"
  },
  {
    "name": "Claudine Neal",
    "gender": "female",
    "company": "Sealoud"
  },
  {
    "name": "Beryl Rice",
    "gender": "female",
    "company": "Velity"
  },
  {
    "name": "Wilder Gonzales",
    "gender": "male",
    "company": "Geekko"
  }
]

Пожалуйста, прочитайте внимательно :

  1. В данных: 01, [имя, пол, компания]: поиск выполняется по имени.
  2. В данных: 02, [@type, companyId, companyCode, legalName и т. Д.]: Поиск должен выполняться с использованием значения legalName / companyId или любого другого поля, не имеет значения.

Пожалуйста, проведите меня через Как мне это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Рекомендую не использовать jquery с угловыми

Вот рабочий код в угловом виде

Вы можете искать, используя legalName, как вы упоминали в вопросе.

Я использовал Angular UI-Bootstrap и jquery не включен

angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('TypeaheadCtrl', function($scope, $http) {

  var _selected;

  $scope.selected = undefined;
  $scope.states = [  
{  
  "@type":"CR",
  "companyId":1819,
  "companyCode":"NVX",
  "legalName":"Navex",
  "dbaName":"Navex Inc.",
  "formation":"P",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":{  
     "personId":2,
     "category":null,
     "firstName":"Arthur",
     "middleName":"Parho",
     "lastName":"Benjiman",
     "dob":null,
     "addresses":null,
     "contacts":null,
     "fullName":"Benjiman, Arthur"
  },
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"CR",
     "value":"Carrier"
  },
  "locations":[  
     {  
        "id":1821,
        "landmark":"4104 Banner Dr.",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"4104 Banner Dr.",
        "street2":null,
        "city":"Houston",
        "state":"TX",
        "zip":"77550",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  

        ],
        "action":0
     }
  ],
  "mcNumber":"124578",
  "dotunitSeries":"111",
  "billingMethod":null,
  "businessName":"Navex"
}, {  
  "@type":"SH",
  "companyId":1824,
  "companyCode":null,
  "legalName":null,
  "dbaName":null,
  "formation":"I",
  "firstName":"Sikandar",
  "middleName":"",
  "lastName":"Ali",
  "dob":"05/01/2018",
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":124578963,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"SH",
     "value":"Shipper"
  },
  "locations":[  
     {  
        "id":1825,
        "landmark":"2202 Jennifer St",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"2202 Jennifer St",
        "street2":null,
        "city":"Dallas",
        "state":"TX",
        "zip":"77880",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  
           {  
              "id":1826,
              "medium":{  
                 "code":"EM",
                 "value":"Email"
              },
              "serviceLocator":"sikandarali744@gmail.com",
              "prefered":true,
              "action":0
           }
        ],
        "action":0
     }
  ],
  "dotunitSeries":null,
  "billingMethod":null,
  "mcNumber":null,
  "businessName":"Ali, Sikandar"
 },
 {  
  "@type":"TS",
  "companyId":1827,
  "companyCode":"",
  "legalName":"Wayis",
  "dbaName":"",
  "formation":"C",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":true,
  "business":{  
     "code":"TS",
     "value":"Truck Stop"
  },
  "locations":[  
     {  
        "id":1828,
        "landmark":"2001 Ravi St",
        "type":{  
           "code":"P",
           "value":"Physical"
        },
        "street1":"2001 Ravi St",
        "street2":null,
        "city":"Dallas",
        "state":"HI",
        "zip":"12345",
        "country":null,
        "latitude":null,
        "longitude":null,
        "contacts":[  

        ],
        "action":0
     }
  ],
  "dotunitSeries":null,
  "billingMethod":null,
  "mcNumber":null,
  "businessName":"Wayis"
}, {  
  "@type":"BR",
  "companyId":1871,
  "companyCode":"",
  "legalName":"E2 Financial",
  "dbaName":"E2F",
  "formation":"C",
  "firstName":null,
  "middleName":null,
  "lastName":null,
  "dob":null,
  "registeredAgent":null,
  "filingDate":null,
  "filingNo":null,
  "documentNumber":null,
  "ssn":null,
  "ein":null,
  "internal":false,
  "business":{  
     "code":"BR",
     "value":"Broker"
  },
  "locations":null,
  "mcNumber":"124578",
  "billingMethod":"MCS",
  "dotunitSeries":null,
  "businessName":"E2 Financial"
}
]
  // Any function returning a promise object can be used to load values asynchronously
  $scope.getLocation = function(val) {
    return $http.get('//maps.googleapis.com/maps/api/geocode/json', {
      params: {
        address: val,
        sensor: false
      }
    }).then(function(response){
      return response.data.results.map(function(item){
        return item.formatted_address;
      });
    });
  };

  $scope.ngModelOptionsSelected = function(value) {
    if (arguments.length) {
      _selected = value;
    } else {
      return _selected;
    }
  };

  $scope.modelOptions = {
    debounce: {
      default: 500,
      blur: 250
    },
    getterSetter: true
  };

  $scope.statesWithFlags = [{'name':'Alabama','flag':'5/5c/Flag_of_Alabama.svg/45px-Flag_of_Alabama.svg.png'},{'name':'Alaska','flag':'e/e6/Flag_of_Alaska.svg/43px-Flag_of_Alaska.svg.png'},{'name':'Arizona','flag':'9/9d/Flag_of_Arizona.svg/45px-Flag_of_Arizona.svg.png'},{'name':'Arkansas','flag':'9/9d/Flag_of_Arkansas.svg/45px-Flag_of_Arkansas.svg.png'},{'name':'California','flag':'0/01/Flag_of_California.svg/45px-Flag_of_California.svg.png'},{'name':'Colorado','flag':'4/46/Flag_of_Colorado.svg/45px-Flag_of_Colorado.svg.png'},{'name':'Connecticut','flag':'9/96/Flag_of_Connecticut.svg/39px-Flag_of_Connecticut.svg.png'},{'name':'Delaware','flag':'c/c6/Flag_of_Delaware.svg/45px-Flag_of_Delaware.svg.png'},{'name':'Florida','flag':'f/f7/Flag_of_Florida.svg/45px-Flag_of_Florida.svg.png'},{'name':'Georgia','flag':'5/54/Flag_of_Georgia_%28U.S._state%29.svg/46px-Flag_of_Georgia_%28U.S._state%29.svg.png'},{'name':'Hawaii','flag':'e/ef/Flag_of_Hawaii.svg/46px-Flag_of_Hawaii.svg.png'},{'name':'Idaho','flag':'a/a4/Flag_of_Idaho.svg/38px-Flag_of_Idaho.svg.png'},{'name':'Illinois','flag':'0/01/Flag_of_Illinois.svg/46px-Flag_of_Illinois.svg.png'},{'name':'Indiana','flag':'a/ac/Flag_of_Indiana.svg/45px-Flag_of_Indiana.svg.png'},{'name':'Iowa','flag':'a/aa/Flag_of_Iowa.svg/44px-Flag_of_Iowa.svg.png'},{'name':'Kansas','flag':'d/da/Flag_of_Kansas.svg/46px-Flag_of_Kansas.svg.png'},{'name':'Kentucky','flag':'8/8d/Flag_of_Kentucky.svg/46px-Flag_of_Kentucky.svg.png'},{'name':'Louisiana','flag':'e/e0/Flag_of_Louisiana.svg/46px-Flag_of_Louisiana.svg.png'},{'name':'Maine','flag':'3/35/Flag_of_Maine.svg/45px-Flag_of_Maine.svg.png'},{'name':'Maryland','flag':'a/a0/Flag_of_Maryland.svg/45px-Flag_of_Maryland.svg.png'},{'name':'Massachusetts','flag':'f/f2/Flag_of_Massachusetts.svg/46px-Flag_of_Massachusetts.svg.png'},{'name':'Michigan','flag':'b/b5/Flag_of_Michigan.svg/45px-Flag_of_Michigan.svg.png'},{'name':'Minnesota','flag':'b/b9/Flag_of_Minnesota.svg/46px-Flag_of_Minnesota.svg.png'},{'name':'Mississippi','flag':'4/42/Flag_of_Mississippi.svg/45px-Flag_of_Mississippi.svg.png'},{'name':'Missouri','flag':'5/5a/Flag_of_Missouri.svg/46px-Flag_of_Missouri.svg.png'},{'name':'Montana','flag':'c/cb/Flag_of_Montana.svg/45px-Flag_of_Montana.svg.png'},{'name':'Nebraska','flag':'4/4d/Flag_of_Nebraska.svg/46px-Flag_of_Nebraska.svg.png'},{'name':'Nevada','flag':'f/f1/Flag_of_Nevada.svg/45px-Flag_of_Nevada.svg.png'},{'name':'New Hampshire','flag':'2/28/Flag_of_New_Hampshire.svg/45px-Flag_of_New_Hampshire.svg.png'},{'name':'New Jersey','flag':'9/92/Flag_of_New_Jersey.svg/45px-Flag_of_New_Jersey.svg.png'},{'name':'New Mexico','flag':'c/c3/Flag_of_New_Mexico.svg/45px-Flag_of_New_Mexico.svg.png'},{'name':'New York','flag':'1/1a/Flag_of_New_York.svg/46px-Flag_of_New_York.svg.png'},{'name':'North Carolina','flag':'b/bb/Flag_of_North_Carolina.svg/45px-Flag_of_North_Carolina.svg.png'},{'name':'North Dakota','flag':'e/ee/Flag_of_North_Dakota.svg/38px-Flag_of_North_Dakota.svg.png'},{'name':'Ohio','flag':'4/4c/Flag_of_Ohio.svg/46px-Flag_of_Ohio.svg.png'},{'name':'Oklahoma','flag':'6/6e/Flag_of_Oklahoma.svg/45px-Flag_of_Oklahoma.svg.png'},{'name':'Oregon','flag':'b/b9/Flag_of_Oregon.svg/46px-Flag_of_Oregon.svg.png'},{'name':'Pennsylvania','flag':'f/f7/Flag_of_Pennsylvania.svg/45px-Flag_of_Pennsylvania.svg.png'},{'name':'Rhode Island','flag':'f/f3/Flag_of_Rhode_Island.svg/32px-Flag_of_Rhode_Island.svg.png'},{'name':'South Carolina','flag':'6/69/Flag_of_South_Carolina.svg/45px-Flag_of_South_Carolina.svg.png'},{'name':'South Dakota','flag':'1/1a/Flag_of_South_Dakota.svg/46px-Flag_of_South_Dakota.svg.png'},{'name':'Tennessee','flag':'9/9e/Flag_of_Tennessee.svg/46px-Flag_of_Tennessee.svg.png'},{'name':'Texas','flag':'f/f7/Flag_of_Texas.svg/45px-Flag_of_Texas.svg.png'},{'name':'Utah','flag':'f/f6/Flag_of_Utah.svg/45px-Flag_of_Utah.svg.png'},{'name':'Vermont','flag':'4/49/Flag_of_Vermont.svg/46px-Flag_of_Vermont.svg.png'},{'name':'Virginia','flag':'4/47/Flag_of_Virginia.svg/44px-Flag_of_Virginia.svg.png'},{'name':'Washington','flag':'5/54/Flag_of_Washington.svg/46px-Flag_of_Washington.svg.png'},{'name':'West Virginia','flag':'2/22/Flag_of_West_Virginia.svg/46px-Flag_of_West_Virginia.svg.png'},{'name':'Wisconsin','flag':'2/22/Flag_of_Wisconsin.svg/45px-Flag_of_Wisconsin.svg.png'},{'name':'Wyoming','flag':'b/bc/Flag_of_Wyoming.svg/43px-Flag_of_Wyoming.svg.png'}];
});
<!doctype html>

  
    
    
    
    
    
    
  
  





    Static arrays
    Model: {{selected | json}}

Пожалуйста, запустите приведенный фрагмент

Вот рабочая демонстрация

0 голосов
/ 08 мая 2018

Я не уверен где вы используете b.toLowercase() ?? . Но правильное решение заключается в том, что вы должны проверить нулевое условие для объекта b, прежде чем делать его строчными.

как

if(b != null)
{
b.toLowerCase()// your code...
}

Примечание:

У вашего массива есть "legalName":null,. Так что это не должно быть нулевым. Или вручную вам нужно выполнить вышеуказанное условие в коде вашей встроенной библиотеки.

EDIT:

В данных: 02, [@type, companyId, companyCode, legalName и т. Д.]: Поиск должен выполняться с использованием legalName / companyId или любого другого поля, не имеет значения.

Если вы не хотите проверять нулевое условие, тогда значение не должно быть нулевым.

Причина ошибки

Потому что null.toLowercase() выбрасывание не является ошибкой функции. То же самое произойдет, если ваше значение будет null.

Редактировать -2

согласно комментарию ниже. пожалуйста, перезапишите эту функцию с помощью нижеуказанной функции

function(a) {
        var b = this.displayText(a);
        return b != null ? b.toLowerCase().indexOf(this.query.toLowerCase()) : "".toLowerCase().indexOf(this.query.toLowerCase())
    },

Теперь вы можете выполнять поиск по любому объекту, не нужно заботиться о значении null

...