在Angular Service中设置$ scope变量

时间:2016-09-29 15:33:03

标签: angularjs service angularjs-scope angular-services angular-controller

我在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

1 个答案:

答案 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;
         }
      )

   }