2014-02-18 66 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 DocumentationCreating Directives that Communicate下有關於指令的Angular文檔中有一個選項卡示例。如果您正在從外部數據源獲取數據以填充範圍,或者使用緩存使用工廠。