我希望将biz逻辑保留在服务中并将想要值的数组对象返回给我的控制器。
service.getBooking($scope.bookingId).success(function (data) {
$scope.booking = data;
console.log("3 storeno: " + $scope.booking.Storeno);
在我的服务中,我有:
testLabApp.factory('service', ['$http', function ($http) {
var getBooking = function (bookingId) {
console.log("[getBooking] bookingId = " + bookingId);
var config = {headers: { 'Accept': 'application/json;odata=verbose' }};
return $http.get(theUrl, config).success(function (data) {
var booking = [];
console.log("1 data.d.results = " + data.d.results.length);
var e = data.d.results[0];
booking = {
Id: e['Id'],
Storeno: e['Title']
};
console.log("2 Done = Id: " + booking.Id + " | Store no: " + booking.Storeno);
return booking;
}, function (er) {
alert(er);
});
}
return {
getBooking: getBooking
}
问题是我希望从getBooking服务调用返回booking [],但是console.log显示“3 storeno:”为undefined。
“1 data.d.results”为1,正如我所料,“2 Done ...”显示我期望的Id和Storeno值。
请问有什么不妥之处。
此致 克雷格
答案 0 :(得分:1)
由于service
返回$http.get
的调用而未按预期返回结果,因此出现错误。尝试使用callback
这样的方法:
控制器:
service.getBooking($scope.bookingId, function(err, data) {
if (err) throw err;
$scope.booking = data;
console.log("3 storeno: " + $scope.booking.Storeno);
}
服务:
testLabApp.factory('service', ['$http', function ($http) {
var getBooking = function (bookingId, callback) {
console.log("[getBooking] bookingId = " + bookingId);
var config = {headers: { 'Accept': 'application/json;odata=verbose' }};
$http.get(theUrl, config).success(function (data) {
console.log("1 data.d.results = " + data.d.results.length);
var e = data.d.results[0];
var booking = {
Id: e['Id'],
Storeno: e['Title']
};
console.log("2 Done = Id: " + booking.Id + " | Store no: " + booking.Storeno);
callback(null, booking);
}.error(err) {
callback(err);
});
}
return {
getBooking: getBooking
}