У меня есть следующая реализация, html:
<input id="myField" name="myField" class="form-control" type="text" placeholder="myField"
ng-model="myController.myObj.FieldValue" typeahead-editable="false"
uib-typeahead="item as item.Description for item in myController.fieldDS($viewValue)" required>
Контроллер: * +1004 *
var vm = this;
vm.fieldDS = myService.getFieldDS;
обслуживание:
function getFieldDS() {
return [{'Description': 'ItemA'}, {'Description': 'ItemB'}, {'Description': 'ItemC'}];
}
И все работает отлично.
Проблема начинается, когда я пытаюсь вызвать удаленный асинхронный интерфейс API.
Я изменил сервис, используя ngResource, и я попробовал следующие функции:
function getFieldDS() {
return Resource.query();
}
function getFieldDS() {
var items = Resource.query();
return items.$promise;
}
function getFieldDS() {
var items = Resource.query();
items.$promise.then(
function (result, responseHeaders) {
return result;
},
function (httpResponse) { console.log('failed: ' + httpResponse); }
);
}
или с кодом на контроллере:
vm.fieldDS = myService.getFieldDS;
vm.fieldDS = function () {return myService.getFieldDS();};
myService.getFieldDS().then(function (result) { vm.fieldDS = result;})
в последнем случае я получаю ошибку типа об ожидаемой функции, может быть, typeahead не найден источник привязки!?
Во всех других случаях, когда я вставляю символ в поле ввода при загрузке страницы, вызывается api, но в списке ввода ничего не отображается. Если я попробую console.log с ответом на запрос или из сервиса, массив будет получен правильно.
Кажется, что поле ввода контроллера или typeahead не ждет ответа от API, но я не понимаю, как решить эту проблему.
Пожалуйста, вы можете мне помочь?
Большое спасибо
редактирование:
способ обслуживания:
function getFieldDS() {
var items = Resource.query();
return items.$promise;
}
и контроллер:
function getSomething() {
var temp = myService.getFieldDS();
temp.then(
function(result) {
console.log(result);
return result;
}
);
return temp;
}
vm.fieldDS = getSomething;
выводит на консоль правильный массив со всеми объектами, но они не добавляются в поле typeahead.
Я нашел пример кода с той же реализацией, но я не понимаю, почему в моем случае он не работает.