2014-02-18 64 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文档中有一个选项卡示例。如果您正在从外部数据源获取数据以填充范围,或者使用缓存使用工厂。