Search code examples
angularjsfactorycontrollers

One factory accessed by diff. controllers but one at a time angularjs


var app=angular.module('myApp',[]);

app.controller('FCtrl',['$scope','mockFactory',function($scope,mockFactory){

	$scope.showPerson = function(){
		mockFactory.fetchJson($scope.valueJson)
		.then(function(){
		$scope.persons = mockFactory.array;
		})
	}

  	$scope.delPerson = function(i){
  		mockFactory.delete(i);
	}

	$scope.addNamePerson = function() {
  		mockFactory.ADD($scope.valueFirst);
  		};
	
   	$scope.showConsolePerson= function(){
   		console.log(JSON.stringify(mockFactory.array));
   	}

}]);

app.controller('SCtrl',['$scope','mockFactory',function($scope,mockFactory){

	$scope.showMovie = function(){
		mockFactory.fetchJson($scope.valueJson)
		.then(function(){
		$scope.movies = mockFactory.array;
		})
	}


  	$scope.delMovie = function(i){
  		mockFactory.delete(i);
	}

	$scope.addNameMovie = function() {
  		mockFactory.ADD($scope.valueSecond);
  		};
	
   	$scope.showConsoleMovie= function(){
   		console.log(JSON.stringify(mockFactory.array));
   	}

}]);

app.controller('TCtrl',['$scope','mockFactory',function($scope,mockFactory){

	$scope.showPlace = function(){
		mockFactory.fetchJson($scope.valueJson)
		.then(function(){
		$scope.places = mockFactory.array;
		})
	}


  	$scope.delPlace = function(i){
  		mockFactory.delete(i);
	}

	$scope.addNamePlace = function() {
  		mockFactory.ADD($scope.valueThird);
  		};
	
   	$scope.showConsolePlace= function(){
   		console.log(JSON.stringify(mockFactory.array));
   	}

}]);

app.factory('mockFactory',['$http',function($http){
		
		var Precord = {};

			Precord.array = [];
			Precord.assign = function (value) {
	        	return $http.get('http://localhost:3000/scripts/' + value + '.json');
	    	};
	    	Precord.fetchJson = function(value){
	    		return Precord.assign(value).success(function(response){
					Precord.array = response.value;
					
				})
	    	}

	    	Precord.delete = function(i){
	   				Precord.array.splice(i,1);
	   		}
		
	   		Precord.ADD = function(value){
	   				var newName = {
      					Name: value
    				};

    				Precord.array.push(newName);
	   		}

		return Precord;
}]);

How can an array in single factory be accessed by different controllers but one at a time such that any update in one controller must not reflect in other controllers? the precord.array is being used in all the controllers, but i want it to be isolated from other controllers while one controller is in use of it


Solution

  • After reviewing your code I found that you should keep a copy of array on controller level so that, If one controller update it then it will not reflect in other controllers,

    I have modified your one controller and your factory, so try to implement it in other controllers also.

    Try this

    FCtrl

        var app=angular.module('myApp',[]);
    
        app.controller('FCtrl',['$scope','mockFactory',function($scope,mockFactory){
    
            $scope.fCtrlJSON = [];          
    
            $scope.showPerson = function(){
                mockFactory.fetchJson($scope.valueJson)
                .then(function(){
                    $scope.persons = mockFactory.array;
                    $scope.fCtrlJSON = mockFactory.array;           
                })
            }
    
            $scope.delPerson = function(i){
                mockFactory.delete($scope.fCtrlJSON,i);
            }
    
            $scope.addNamePerson = function() {
                mockFactory.ADD($scope.fCtrlJSON,$scope.valueFirst);
            };
    
            $scope.showConsolePerson= function(){
                console.log(JSON.stringify($scope.fCtrlJSON));
            }
    
        }]);
    

    mockFactory

     app.factory('mockFactory',['$http',function($http){
    
            var Precord = {};
    
            Precord.array = [];
            Precord.assign = function (value) {
                return $http.get('http://localhost:3000/scripts/' + value + '.json');
            };
            Precord.fetchJson = function(value){
                return Precord.assign(value).success(function(response){
                    Precord.array = response.value;                 
                })
            }
    
            Precord.delete = function(arrayData, i){
                arrayData.splice(i,1);
            }
    
            Precord.ADD = function(arrayData, value){
                var newName = {
                    Name: value
                };
                arrayData.push(newName);
            }
    
            return Precord;
        }]);