Sign up ×
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them, it only takes a minute:

I have 3 controllers that do similar tasks:

  • PastController queries an API for past system outages.
  • CurrentController queries an API for current system outages
  • FutureController queries an API for future system outages

They are each unique (despite their similar functions). However, they all begin by defining the same $scope variables:

app.controller("PastController", function ($scope) {
   $scope.Outages = "";
   $scope.loading = 0;
   $scope.nothing = 0;
   $scope.error = 0;
   //--- code continues ---//
});

app.controller("CurrentController", function ($scope) {
   $scope.Outages = "";
   $scope.loading = 0;
   $scope.nothing = 0;
   $scope.error = 0;
   //--- code continues ---//
});

app.controller("FutureController", function ($scope) {
   $scope.Outages = "";
   $scope.loading = 0;
   $scope.nothing = 0;
   $scope.error = 0;
   //--- code continues ---//
});

Can I use a service or factory to initialize those variables in one place rather than repeating the code?

share|improve this question
    
this is a perfect example to implement also some inheritance between controllers. – rahpuser Nov 19 '14 at 21:16

1 Answer 1

up vote 1 down vote accepted

I didn't test the code, but this is my idea if you want to work with services, hope it works.

Create the service first:

app.service('systemService', function(){

 // initialize object first
this.info = {}; 
this.initialize = function(){
  //  properties initialization
  this.info.Outages = "";
  this.info.loading = 0;
  this.info.nothing = 0;
  this.info.error = 0;

  return this.info;
}

});

In the end, you have to inject the created service into controllers correctly and call the initialize function from service:

app.controller("PastController",['$scope','systemService', function ($scope, systemService) {
$scope.info = systemService.initialize();
}]);

... and set so in each controller.

share|improve this answer
    
This worked for me! – sqdge Nov 14 '14 at 16:17
    
I don't have enough reputation to vote... sorry. – sqdge Nov 14 '14 at 18:34
    
Np, I'm glad that I could help :-) – arman1991 Nov 14 '14 at 19:42

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.