Passing data between controllers in Angular JS?
angular-services, angularjs, javascript
Solution
From the description, seems as though you should be using a service. Check out http://egghead.io/lessons/angularjs-sharing-data-between-controllers and AngularJS Service Passing Data Between Controllers to see some examples.
You could define your product service (as a factory) as such:
app.factory('productService', function() {
var productList = [];
var addProduct = function(newObj) {
productList.push(newObj);
};
var getProducts = function(){
return productList;
};
return {
addProduct: addProduct,
getProducts: getProducts
};
});
Dependency inject the service into both controllers.
In your `ProductController`, define some action that adds the selected object to the array:
app.controller('ProductController', function($scope, productService) {
$scope.callToAddToProductList = function(currObj){
productService.addProduct(currObj);
};
});
In your `CartController`, get the products from the service:
app.controller('CartController', function($scope, productService) {
$scope.products = productService.getProducts();
});
Problem
I have a basic controller that displays my products, ``` App.controller('ProductCtrl',function($scope,$productFactory){ $productFactory.get().success(function(data){ $scope.products = data; }); }); ``` In my view I'm displaying this products in a list ``` <ul> <li ng-repeat="product as products"> {{product.name}} </li> </ul ``` What I'm trying to do is when someone click on the product name, i have another view named cart where this product is added. ``` <ul class="cart"> <li> //click one added here </li> <li> //click two added here </li> </ul> ``` So my doubt here is, how do pass this clicked products from first controller to second? i assumed that cart should be a controller too. I handle click event using directive. Also i feel i should be using service to achieve above functionality just can't figure how? because cart will be predefined number of products added could be 5/10 depending on which page user is. So i would like to keep this generic. Update: I created a service to broadcast and in the second controller i receive it. Now the query is how do i update dom? Since my list to drop product is pretty hardcoded.