问题:我的服务正在检索正确的信息,为什么我的控制器不能从我的服务中获取数据?
服务:这是我的控制器(以及最终其他东西)调用的代码。
// 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]
作为API调用中.then()
的一部分记录到控制台。该数组包含我想要的数据。由于某种原因,我似乎无法在控制器中访问它。当我使用调试器运行它时,我得到'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();
}
}
})();
回顾:我的服务获取正确的数据并将其记录到控制台。我的控制器没有通过调用服务获得相同的信息。我怎样才能解决这个问题,误解是什么导致了我这个问题呢?
答案 0 :(得分:3)
您必须更改工厂中的方法,因为方法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
});
}