2014-02-18 9 views
2

저는 최근에 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입니다. 데이터가 외부 데이터 소스에서 범위를 채우도록 가져 오거나 캐싱을 사용하면 팩토리를 사용하십시오.