javascript - Controller 内的 AngularJS Controller

标签 javascript angularjs

我最近一直在使用 AngularJS,我觉得我可能对范式的思考是错误的。

我有一个 Pane Controller (绑定(bind)到 ng-repeat),它跟踪用户打开了哪些“ Pane ”。现在,每个 Pane 中都将包含数据,这意味着几乎所有 Pane 中都会有另一个 Controller 。

我读到one answer here (with a similar situation)其中答案建议将其“弹出” Controller 重写为服务。

Pane Controller :

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);
        }
    }
});

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

最佳答案

我建议您将其重写为指令,并在指令的 Controller 中建立模型 <=> View 关联。

Angular 文档中有一个关于 Angular Documentation 中的指令的选项卡示例。下Creating Directives that Communicate 。如果您要从外部数据源获取数据来填充范围,或者使用缓存,请使用工厂。

关于javascript - Controller 内的 AngularJS Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862943/

相关文章:

javascript - 从 AngularJS 中自执行的 Promise 返回一个值

javascript - Node.JS 错误 - process.env.NODE_TLS_REJECT_UNAUTHORIZED。这是什么意思?

javascript - 动态指令元素在从服务中预填充数据时失败

javascript - 谷歌应用程序脚本 AppendRow 到顶部

javascript - 从 html 正文中删除除 <a>、<br>、<b> 和 <img> 之外的所有 HTML 标记

javascript - 从 Angular Controller 控制 SoundCloud js sdk

javascript - 私有(private)子方法的原型(prototype)

javascript - 使用 Javascript 生成 HTML,然后用 Angular js 解释它

javascript - AngularJS $scope.$在多个事件上

javascript - Angularjs $http.post - 将参数作为 JSON 发送到 ASPX webmethod