2016-10-04 3 views
0

Я пытаюсь создать аналогичную функцию javascript для loadAllOriginal. Но значение переменной allEmployees - это список с объектами emplooyee (ID, FirstName, LastName). Как я могу это сделать? Я пытаюсь использовать этот метод с автозаполнением с этой страницы: https://material.angularjs.org/latest/demo/autocompleteПопробуйте создать аналогичную ранее существовавшую функцию javascript

function loadAllOriginal() 
{ 
    var allEmployees = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\ 
    Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\ 
    Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\ 
    Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\ 
    North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\ 
    South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\ 
    Wisconsin, Wyoming'; 

    return allEmployees.split(/, +/g).map(function (employee) 
    { 
     return 
     { 
      value: employee.toLowerCase(), 
      display: employee 
     }; 
    }); 
} 

function loadAll() 
{ 
    var allEmployees = $http.post('../Admin/GetUsers/'); 
    .......... 
} 
+0

Как это точно? Вы спрашиваете, как получить работу от первой функции, которая должна быть прямой, видя, как она возвращает тех, кто нанимает, когда вы это называете? – adeneo

+0

Нижняя функция loadAll должна делать то же самое, что и loadAllOriginal. – user6440175

+0

Какова структура данных, полученных по запросу? JSON? –

ответ

0

Хорошо, так что я сделал плохое предположение о том, что вы знали, как получить записи, загруженные в переменную allEmployees. Я обновил свой ответ, чтобы включить способ получения данных из асинхронного вызова функции, а затем впоследствии использовать эти данные.

Один из способов, которым вы можете заставить это работать, - использовать отложенный объект и вернуть обещание от функции loadAll(). Это можно сделать, используя службу $ q, которая встроена в угловую. Вот один из способов его реализации:

function loadAll() { 
    return $q(function (resolve, reject) { 
     $http.post('../Admin/GetUsers/').then(function successCallback(response) { 
      resolve(response.data.map(function (employee, index) { 
       return { 
        value: employee.ID, 
        display: employee.FirstName + " " + employee.LastName 
       } 
      })); 
     }, function failureCallback(response) { 
      reject("Error!"); 
     }); 
    }); 
} 
var allEmployees = []; 
loadAll().then(function success(employees) { 
    allEmployees = employees; 
}, function failure(message) { 
    console.log(message); 
    allEmployees = []; 
}).then(function(){ 
    console.log(allEmployees); 
    // rest of your code that uses the allEmployees variable goes here... 
}); 
+0

Спасибо. Я получаю следующую ошибку: «TypeError: allEmployees.map не является функцией» – user6440175

+0

Не просто раздавайте код без объяснений. Кроме того, '$ http.post' является асинхронным и не возвращает массив. –

+0

Это не будет работать, так как вызов асинхронный и ничего не вернет. На самом деле, он вообще ничего не может вернуть – putvande

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