1

我正在构建一个应用程序,该应用程序通过 $rootScope 上的 AJAX 调用获取日历数据。我在各种控制器中使用这个对象,并且我需要能够适当地解析它,因为其中嵌套了各种对象。我应该在哪里存储逻辑来解析它?我已经将它作为 $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 中还是其他地方呢?

4

1 回答 1

0

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

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

于 2013-08-08T15:53:45.550 回答