2014-02-18 2 views
2

Недавно я работал с AngularJS, и я чувствую, что могу ошибаться в парадигме.Контроллеры AngularJS внутри контроллеров

У меня есть контроллер панели (привязанный к ng-repeat), который отслеживает, какие «окна» открываются пользователем. Теперь каждая из этих панелей должна иметь в себе данные, а это значит, что почти у всех из них есть другой контроллер внутри них.

Я прочитал one answer here (with a similar situation), в котором ответ предлагает переписать свой «всплывающий» контроллер как услугу.

Контроллер панели:

app.controller('PaneCtrl', function ($scope, PaneService){ 
    var updatePanes = function(panes){ 
     $scope.panes = panes; 
    } 

    // subscribes this controller to the Pane Service 
    PaneService.registerObserverCallback(updatePanes) 
}); 

Сервис

app.factory('PaneService', function(){ 
    var observerCallbacks=[] 
    var panes = [] 

    var notifyObservers = function(){ 
     angular.forEach(observerCallbacks, function(callback){ 
      callback(panes); 
     }); 
    } 

    return { 
     createRootPane: function(title, meta, data){ 
      // do stuff 
     }, 

     toggleSearchPane: function(){ 
      // do stuff 
      notifyObservers(); 
     }, 

     registerObserverCallback: function(callback){ 
      observerCallbacks.push(callback); 
     } 
    } 
}); 

Мой вопрос: что является лучшей практикой здесь, и если лучшая практика «переписать в виде только услуга ", как бы выглядела эта услуга?

ответ

2

Я бы предложил вам переписать это как директиву и сделать модель < => посмотреть ассоциацию внутри контроллеров директивы.

В документе с угловыми углами указаны директивы в Angular Documentation под номером Creating Directives that Communicate. Если вы получаете данные для заполнения области из внешнего источника данных или используете кеширование, используйте фабрику.

Смежные вопросы