我有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();
});
有人可以幫我解決這個問題嗎?
感謝您的回覆。還有一件事,每次我的代碼路由到「ProductsController」時,它都會調用$ scope.GetProducts();它在內部調用ProductService和http服務,所以每次發出http請求。它將修改後的ProductInfo更新爲新的響應。如何避免這種情況? – 2015-04-04 04:04:18
服務被注入,從而共享資源。想象它有兩個變量指向C#,VB或類似的引用類型。如果你改變它的一個地方,它到處改變。 – Yatrix 2015-04-04 04:08:28