- Угловое 1.5.8
- Bootstrap 3.3.7 (CSS)
- радиально-щ 2.0.2
Использование угловой машинописный (ui.bootstrap.typeahead) требует список объектов который будет отображаться в компоненте пользовательского интерфейса с HTMLtyphead не заселять угловую щ
Проблема
Возвращаясь
promise
от службы к компоненту (контроллера 1,5 стиля, вид, переплеты) функция
контроллера использует возвращенный
promise
от службы и выполняетthen
логики и возвращаетarray
объектовTypeahead не обрабатывает массив ... выполняя консольный журнал, вы можете увидеть массив.
Если я статический пройти один и тот же массив объектов без с использованием методы сервиса, то функция работает
HTML
<input type="text" ng-model="$ctrl.search.term" ng-disabled="!$ctrl.search.type"
typeahead-wait-ms="600"
placeholder="Search..."
uib-typeahead="res as res.name for res in $ctrl.submit($viewValue)"
typeahead-no-results="noResults" class="form-control" required>
<i ng-show="loadingLocations" class="icon ion-refresh"></i>
<div ng-show="noResults">
<i class="icon ion-close"></i> No Results Found
</div>
<select class="form-control custom-select-md"
ng-model="$ctrl.search.type"
placeholder="Type"
required>
<option value="" disabled selected>Select Type?</option>
<option value="car">car</option>
<option value="van">van</option>
</select>
компоненты (контроллер, вид)
//submit search for issuers or issuedCard
submit() {
this.isSubmitting = true;
this._SearchService.performSearch(this.search)
.then(
(resp) => {
//e.g. [{id:1, name:'test'}]
console.log('Search Result', resp);
return resp;
},
(err) => {
console.log('Error Search', err);
this.reset(false);
this.errors = err;
return [];
}
);
//Comment out method above to see this static data returning and working as should be :'(
//return [{id:865,issuer: {},name:"British Testing"},
// {id:866,issuer: {},name:"American Testing"}];
}
Сервис
performSearch(searchData) {
console.log('Search Qry', searchData);
let deferred = this._$q.defer();
if(!this.isValidSearch(searchData)) {
deferred.reject({status:400, error: 'Bad Request', message:'invalid data'});
return deferred.promise;
}
let searchURI = (searchData.type === 'car' ? 'van' : 'issuer');
this._$http({
url: `${this._AppConstants.api}/${this._AppConstants[searchURI]['search']}`,
method: 'GET',
params: {
name: searchData.term
}
}).then(
(resp) => {
console.log('Search Data', resp);
this.result.term = searchData.term;
this.result.type = searchURI;
deferred.resolve(resp.data[this._AppConstants[searchURI]['searchResp']]);
},
(err) => {
console.log('Error performing search', err);
deferred.reject(err.data);
}
);
return deferred.promise;
}
Спасибо за ваш ответ :) Я не думаю, что вы поняли, что возвращается? Я прекрасно вижу в консоли, что в контроллере есть массив объектов, который возвращается в представление. [пример скриншота] (http://imgur.com/a/ltQG4). Служба возвращает обещание 'deferred.promise', которое является результатом API и представляет собой массив объектов' [{id: 1, name: 'testing'}, {id: 2, name: 'testing 2'}] ' , Контроллер получает это обещание и обрабатывается с помощью обработчиков успеха/ошибок 'then' (опущены некоторые из дальнейших задач многословия обработки) и возвращает массив в вид – RRR
№. Он не возвращает массив. Перечитайте мой ответ. Функции обратного вызова, переданные then(), возвращают массив. Но метод submit() ничего не возвращает. И он не может возвращать массив, так как массив получается ** асинхронно **, используя обещание. Таким образом, он мог (и должен) вернуть обещание массива, но это не так: он ничего не возвращает. Если бы это произошло, ваш typeahead работал бы нормально, и вы бы не задали свой вопрос. Просто потому, что массив печатается внутри кода функции, не означает, что этот массив возвращается из функции. Это две разные вещи. –
Может быть, я не понимаю:/... спасибо за ваше время, очень ценю! Я парень Java/Groovy haha ... все еще получаю голову от JS. Я добавил возвращение просто к контроллеру по методу службы, и это работает ... моя голова просто не совсем понимает, почему. Вы упомянули, что submit ничего не возвращает ... почему не тот факт, что я возвращался из-за ошибки обработки ошибки или успеха? Не могу поверить, сколько времени я потратил на эту глупую проблему:/ – RRR