0

裏面我有這樣的服務在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; 
     }); 
    }); 
}; 

此代碼工作正常,我在HTML temnplate與ng-repeat指令顯示$scope.products的數據,但我有這個問題。 當我想在同一個控制器的其他方法中使用$scope.products時,它總是空的。我打電話$scope.getProducts()方法,之後我使用console.log($scope.products),它總是[]。 我做了一個測試,我認爲這是因爲$scope.products在服務裏面,它使用.then來解決這個承諾。

任何人都知道如何解決這個問題?我需要在控制器的其他方法中使用$scope.products

+2

也許你正試圖接取'$ scope.products'承諾解決之前。你可以在'$ scope.getProducts'中返回承諾並使用'then'來確保'$ scope.prodcuts'有數據 – taguenizy

+0

你在哪裏調用console.log($ scope.products)? $ scope.getProducts調用之後? – user449689

+1

是的,我認爲這是問題,承諾還沒有解決。感謝您的評論。 –

回答

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

    }