Ебушки воробушки... А теперь посмотрите на мой вариант, взгляните на свою реализацию, и скажите как лучше.
angular.module('productStore', [])
.factory('productRepository', function ($http) {
var dataResolve = function(promise) {
return promise.then(function(response) {
return response.data;
}
}
return {
getProducts: function (category) {
category = category || '';
return dataResolver($http.get('/api/productservice/' + category));
},
addToCart: function (id) {
return dataResolver($http.post('/api/cartservice/add/' + id));
},
getTotalPrice: function (callback) {
return dataResolver($http.get('/api/cartservice/'));
}
}
})
.controller('ProductController', function ($http, productRepository) {
var updateTotalPrice = angular.bind(this, function() {
return productRepository.getTotalPrice.then(angular.bind(this, function(result) {
this.totalPrice = result;
}));
});
updateTotalPrice();
productRepository.getProducts(category).then(angular.bind(this, function(results) {
this.products = results;
});
this.addToCart = function(id) {
productRepository.addToCart(id).then(function() {
updateTotalPrice();
};
}
});
Используйте промисы, не используйте эти стремные штуки с this. У вас есть .bind нативный и angular.bind.
в частности меня вводит в ступор следующее:
var ProductController = new productStore.controller
Если вы методы этого контроллера используете где-то еще, то самое время подумать о том что бы вынести все это добро в сервис.