Aar*_*wer 4 javascript angularjs angularjs-controller angular-promise
根据AngularJS,我$http通过我的控制器的服务调用返回undefined?
这里似乎有什么问题?我试图返回调用的数据,但一旦传递给控制器,数据变得不确定?
JavaScript的
var myStore = angular.module('myStore', [])
.controller('StoreController', ['$scope', 'dataService', function ($scope, dataService) {
$scope.products = dataService.getData();
}])
.service('dataService', ['$http', function($http) {
this.getData = function() {
$http.get('assets/scripts/data/products.json')
.then(function(data) {
return data;
});
};
}]);
Run Code Online (Sandbox Code Playgroud)
HTML
<div class="content">
<ul>
<li ng-repeat="product in products.products">{{product.productName}}</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
我的理解是$http,$q和$resource所有的回报承诺,但我想我已经覆盖了与.那么.
这个问题可能是,你是不是return荷兰国际集团所创造的承诺$http.get在您的dataService.getData功能.换句话说,您可以undefined通过更改您拥有的内容来解决您的问题:
.service('dataService', ['$http', function($http) {
this.getData = function() {
return $http.get...
};
}
Run Code Online (Sandbox Code Playgroud)
如果你有多个电话$http.get中dataService.getData,这里是你会如何处理它们.
.service('dataService', ['$http', function($http) {
this.getData = function() {
var combinedData, promise;
combinedData = {};
promise = $http.get(<resource1>);
promise.then(function (data1) {
combinedData['resource1Response'] = data1;
return $http.get(<resource2>);
});
return promise.then(function (data2) {
combinedData['resource2Response'] = data2;
return combinedData;
});
};
}]);
Run Code Online (Sandbox Code Playgroud)
然而,更清洁的方式是使用 $q.all
.service('dataService', ['$http', '$q', function($http, $q) {
this.getData = function() {
var combinedData, promises;
combinedData = {};
promises = $q.all([
$http.get(<resource1>),
$http.get(<resource2>)
]);
return promises.then(function (allData) {
console.log('resource1 response', allData[0]);
console.log('resource2 response', allData[1]);
return allData;
});
};
}]);
Run Code Online (Sandbox Code Playgroud)