У меня есть следующая разметка uib-typeahead:
<input type="text" class="form-control" id="field_location" ng-model="surveyData.location"
placeholder="Search"
uib-typeahead="location as location.name for location in newListLocations | filter:$viewValue:customSearch | orderBy:location.country.name | limitTo:200"
typeahead-editable="false">
И я обновляю его вызовом REST, который прекрасно работает в серверной части, и вот как я использую его в контроллере (взято из этот вопрос ):
$scope.filterLocations = function(searchValue, viewValue) {
var newListOfLocations = LocationTypeaheadFilter.queryWithTypeaheadSearchValue(viewValue).then(function (list){
$scope.newListLocations = list.data;
console.log($scope.newListLocations);
return $scope.newListLocations;
},
function errorCallback(response) {
alert('Error');
throw response;
});
return newListOfLocations;
};
Эта функция вызывается с использованием этой оригинальной разметки:
$scope.customSearch = function(searchValue, viewValue){
return $scope.filterLocations(searchValue, viewValue);}
Сначала я попытался поместить всю логику водин и тот же метод, но без разницы, список для typeahead всегда оказывается пустым, даже когда я регистрирую его на консоли в области .then
, он показывает все значения, которые я ожидаю, что он будет удерживаться.
IЯ пробовал несколько разных способов, но я считаю, что это должно работать так, как я его кодировал, при условии, что я жду обратного вызова
РЕДАКТИРОВАТЬ , чтобы добавить фабрику, гдеЯ определил сервис Angular:
.factory('LocationTypeaheadFilter', function ($http, DateUtils) {
return {
queryWithTypeaheadSearchValue: function(query){
return $http.get("api/locationssearchTypeahead/"+query)
}
}});