I am trying to create a factory for angular module which returns a JSON object received through angular's $http.get().
Within the callback function for success(), I am trying to assign the object to the variable products. It seems products is getting returned from the factory function before the assignment could take place.
Can someone advise how the below code can be synchronized? How do we delay execution of return products; until $http.get('/products').success(); is complete?
Also is there a better approach?
angular.module('app', ['ngRoute'])
.factory('products', ['$http',function ($http) {
var products;
$http.get('/products').success(function(data,status,header,config){
products=data;
console.log(products); //[Object, Object, Object]
});
console.log(products); //undefined
return products;
}])
UPDATE
angular.module('app', [])
.factory('members1', ['$http',
function ($http) {
var members1=[];
$http({
method: 'GET',
url: '/members.json'
}).success(function (data, status, headers, cfg) {
members1=data;
});
return members1;
}])
.factory('members2', ['$http',
function ($http) {
var members2=[];
$http({
method: 'GET',
url: '/members.json'
}).success(function (data, status, headers, cfg) {
angular.copy(data,members2);
});
return members2;
}])
.controller('controller1', ['$scope','members1','members2',
function ($scope,members1,members2) {
$scope.members1=members1;
$scope.members2=members2;
}]);
above code has two identical factories with just one difference (angular.copy instead of assignment). The one with angular.copy works for the below template.
<div ng-controller="controller1">
<div>
Using Members1 Factory
<ul>
<li ng-repeat="member in members1">{{member.name}}</li>
</ul>
</div>
<div>
Using Members2 Factory
<ul>
<li ng-repeat="member in members2">{{member.name}}</li>
</ul>
</div>
</div>
view :
Using Members1 Factory
Using Members2 Factory
Name1
Name2
Name3