2015-04-04 78 views
0

我有ProductService和ProductsController。 ProductService有ProductService.Products = [];包含所有產品信息的變量。 我在ProductsController中訪問此產品信息並存儲在名爲$ scope.Products = [];的變量中。服務更新沒有反映在控制器中。 AngularJS

問題是一些其他服務也使用「ProductService」,並使用ProductService中公開的「UpdateInfo」函數更新「Products Info」。現在這些更改不會反映在ProductsController變量$ scope.Products = [] ;.

這是我的代碼。

sampleApp.factory('ProductService', ['$http', '$q', function ($http, $q){ 
    var req = { 
     method: 'POST', 
     url: 'ProductData.txt', 
     //url: 'http://localhost/cgi-bin/superCategory.pl', 
     headers: { 'Content-Type': 'application/x-www-form-urlencoded' }//, 
     //data: { action: 'GET' } 
    }; 
    var ProductService = {}; 
    ProductService.Products = []; 
    return { 
     GetProducts: function() { 
      var defer = $q.defer(); 
      $http(req).then(function(response) { 
       ProductService.Products = response.data; 
       defer.resolve(ProductService.Products); 
      }, function(error) { 
       defer.reject("Some error"); 
      }); 
      return defer.promise; 
     }, 

     UpdateInfo: function (ProductID, VariantID) { 

      for (i in ProductService.Products) { 
       if (ProductService.Products[i].ProductID == ProductID) { 
        for (j in ProductService.Products[i].Variants) { 
         if (ProductService.Products[i].Variants[j].VariantID == VariantID) { 
          ProductService.Products[i].Variants[j].InCart = 1; /* Updating Info Here, But its not reflecting */ 
          break; 
         } 
        } 
        break; 
       } 
      } 
     } 
    }; 
}]); 


sampleApp.controller('ProductsController', function ($scope, $routeParams, ProductService, ShoppingCartService) { 

    $scope.Products = []; 

    $scope.GetProducts = function() { 
     ProductService.GetProducts().then 
     (
      function(response) { 
       $scope.Products = response; 
      }, 
      function(error) { 
       alert ('error worng'); 
      } 
     ); 
    }; 

    $scope.GetProducts(); 



}); 

有人可以幫我解決這個問題嗎?

回答

2

您可以在您的控制器上創建一個$watchProductService.Products。當值更改時,可以使用新值更新$scope.Products

$scope.$watch('ProductService.Products', function() { 
    $scope.Products = ProductService.Products; 
}); 
+0

感謝您的回覆。還有一件事,每次我的代碼路由到「ProductsController」時,它都會調用$ scope.GetProducts();它在內部調用ProductService和http服務,所以每次發出http請求。它將修改後的ProductInfo更新爲新的響應。如何避免這種情況? – 2015-04-04 04:04:18

+0

服務被注入,從而共享資源。想象它有兩個變量指向C#,VB或類似的引用類型。如果你改變它的一個地方,它到處改變。 – Yatrix 2015-04-04 04:08:28

-1

嘗試將ProductsService.Products分配給$ scope.products。

$scope.GetProducts = function() { 
      ProductService.GetProducts().then 
      (
       function(response) { 
        $scope.Products = ProductService.Products; 
       }, 
       function(error) { 
        alert ('error worng'); 
       } 
      ); 
     }; 
相關問題