2014-11-14 3 views
3

У меня есть 3 контроллеров, которые делают подобные задачи:

  • PastController запрашивает API для последних отключений системы.
  • CurrentController запрашивает API для текущих отключений системы
  • FutureController запрашивает API для будущих отключений системы

Каждый из них уникален (несмотря на их аналогичные функции). Тем не менее, все они начинаются с определением того же $scope переменных:

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 ---// 
}); 

Могу ли я использовать услугу или фабрику, чтобы инициализировать эти переменные в одном месте, а не повторять код?

+0

Это прекрасный пример реализации некоторого наследования между контроллерами. – rahpuser

ответ

4

Я не тестировал код, но это моя идея, если вы хотите работать с сервисами, надеюсь, что это сработает.

Создать службу первый:

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; 
    } 

    this.fooFunction = function() { 
     return "Hello!" 
    }; 

    }); 

В конце концов, вы должны правильно вводить созданную службу в контроллерах и вызвать функцию инициализации от службы:

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

... и установить поэтому в каждом контроллере.

+1

Это сработало для меня! – sqdge

+0

У меня недостаточно репутации, чтобы проголосовать ... извините. – sqdge

+1

Np, я рад, что смог помочь :-) – arman1991