控制器内部的AngularJS控制器

时间:2014-02-18 19:00:48

标签: javascript 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);
        }
    }
});

我的问题是这里的最佳做法是什么,如果最佳做法是“将其重写为仅服务”,那该服务会是什么样的?

1 个答案:

答案 0 :(得分:2)

我建议你将其重写为指令并制作模型< =>在指令的控制器中查看关联。

Angular Documentation下的Creating Directives that Communicate中,有关指令的Angular文档中有一个标签示例。如果要从外部数据源获取数据以填充范围,或使用缓存使用工厂。