我在AngularJS中有这项服务:
this.getProductsSiteService = function(idSite)
{
return $http.get(BASE_URL + 'obtener/productos/sitio/'+idSite);
}
工作正常。我使用以下方法来使用服务:
$scope.getProducts = function()
{
auth.getSiteInfo().then(function(resp)
{
auth.getProductsSiteService(resp.data.idSite).then(function(response)
{
var json = angular.fromJson(response.data.Respuesta);
$scope.products = json.Table;
});
});
};
此代码工作正常,我使用$scope.products
指令在HTML temnplate中显示ng-repeat
的数据,但是我遇到了这个问题。
当我想在同一个控制器的其他方法中使用$scope.products
时,它总是为空的。我调用$scope.getProducts()
方法,然后使用console.log($scope.products)
,它始终为[]
。
我做了一个测试我认为这是因为$scope.products
在服务内部,它使用.then
来解决这个承诺。
有人知道如何解决这个问题吗?我需要在控制器的其他方法中使用$scope.products
。
答案 0 :(得分:0)
让服务处理获取站点信息并存储它。然后让它处理产品,然后存储。然后,只需要询问控制器的产品。该方法可以返回一个承诺,以便在尚未请求产品时要求产品异步工作。
类似于:
this.getProductsSiteService = function() { if (products) return $q.when(products); //do your http request here based on previously stored site id return $http.get(BASE_URL + 'obtener/productos/sitio/'+idSite).then( function(response) { var json = angular.fromJson(response.data.Respuesta); products = json.TABLE; return products; } ) }