Вопрос: Моя служба получает правильную информацию, поэтому почему мой контроллер не получает данные от моего сервиса?
Сервис: это код, который вызывает мой контроллер (и, в конечном счете, другие вещи).
// search.service.js
(function () {
'use strict';
angular.
module('trips').
factory('SearchService', SearchService);
SearchService.$inject = ['BoatList'];
function SearchService(BoatList) {
var service = {
getBoatList: getBoatList
};
return service;
//////////////////////
function getBoatList() {
BoatList.query()
.$promise
.then(function (data) {
console.log(data);
return data;
})
.catch(function (error) {
return error;
})
}
}
})();
Информация о консоли:
Вот почему я так смущен. Служба регистрирует Array[7]
на консоли как часть .then()
в вызове API. Массив содержит данные, которые я хочу. По какой-то причине я не могу получить доступ к нему в контроллере. Когда я запускаю его с помощью отладчика, я получаю 'undefined'
.
Контроллер: Когда я вызываю тот же код, что и в сервисе getBoatList
все работает отлично. Когда я пытаюсь получить доступ к данным возврата из activate()
я не получаю никаких ошибок, просто 'undefined'
.
//search.controller.js
(function () {
'use strict';
angular.
module('trips').
controller('SearchController', SearchController);
SearchController.$inject = ['$stateParams', 'SearchService'];
function SearchController($stateParams, SearchService) {
var vm = this;
vm.boatList = null;
activate();
////////////////////
function activate() {
vm.boatList = SearchService.getBoatList();
}
}
})();
Recap: мое обслуживание получает правильные данные и записывает их на консоль. Мой контроллер не получает такую же информацию, позвонив в службу. Как я могу это исправить, и какое недоразумение вызывает у меня эту проблему?
Вы должны изменить метод на своем заводе, потому что метод getBoatList
должен вернуть обещание.
Измените свой заводский метод на:
function getBoatList() {
return BoatList.query().$promise;
}
И в контроллере вы должны изменить способ activate
:
function activate() {
SearchService.getBoatList()
.then(function (data) {
vm.boatList = data;
})
.catch(function (error) {
// do smth on error
});
}