模型操作逻辑在AngularJS中的位置在哪里?

时间:2013-08-08 15:37:58

标签: angularjs angularjs-scope

我正构建一个通过$ rootScope上的AJAX调用获取日历数据的应用程序。我在各种控制器中使用这个对象,我需要能够适当地解析它,因为嵌入了各种对象。我应该在哪里存储逻辑来解析它?我在root控制器中将它作为$ rootScope函数使用,但我觉得这是工厂的用例。但是,从模板中访问工厂方法看起来并不像(也不是一个好主意)。

目前我有以下工厂:

angular.module('services',[]).
factory('dataManipulation', function(){
    return{
        getPerson: function(peopleObj, userID){
            //Since each user has a unique ID, this returns an array with one element,
            // so to simplify the view code, there's a [0] at the end
            var person= peopleObj.filter(function(element, index, array) {
                if (array[index].cwid == userID) {
                    return true;
                }
            })[0];
            return person;
        }
    };
});

以下在我的控制器中:

angular.module('app.controllers',[]).
controller('rootCtrl', ['$rootScope', '$http', 'dataManipulation',
    function($rootScope, $http, dataManipulation) {
        $rootScope.getPerson = function(peopleObj, userID){
            return dataManipulation.getPerson(peopleObj, userID);
        }
    }
]);

它有效,但我不确定我是否遵循最佳做法。

那么,解析模型的这些函数应该在rootScope中还是在其他地方?

1 个答案:

答案 0 :(得分:0)

您的帖子有点令人困惑(您需要解析一个对象?:s)但是 我会使用服务或提供者或工厂(同一事物的实现变体)来实现您所描述的内容。 这样可以避免完全使用$ rootScope,并将服务/工厂注入需要使用它们的控制器中。

$ scope本质上是你的模型(或者更确切地说是你的模型的存储设备,在你的Angular应用程序的上下文中存在与$ scope直接存储数据相关的危险,即$ scope.x = 1),$ rootScope “全局”父主要用于内部管理范围(据我所知,我可能会错,并会尝试确认这一点)并在全局范围内发出事件,但可以非常方便地用于存储数据 - 尽管这应该是尽可能避免。 IMO的想法是在尽可能接近可用状态的情况下将模型传递给Angular应用程序,以便Angular应用程序中模型所需的唯一操作纯粹是表现性的。