我正构建一个通过$ 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中还是在其他地方?
答案 0 :(得分:0)
您的帖子有点令人困惑(您需要解析一个对象?:s)但是 我会使用服务或提供者或工厂(同一事物的实现变体)来实现您所描述的内容。 这样可以避免完全使用$ rootScope,并将服务/工厂注入需要使用它们的控制器中。
$ scope本质上是你的模型(或者更确切地说是你的模型的存储设备,在你的Angular应用程序的上下文中存在与$ scope直接存储数据相关的危险,即$ scope.x = 1),$ rootScope “全局”父主要用于内部管理范围(据我所知,我可能会错,并会尝试确认这一点)并在全局范围内发出事件,但可以非常方便地用于存储数据 - 尽管这应该是尽可能避免。 IMO的想法是在尽可能接近可用状态的情况下将模型传递给Angular应用程序,以便Angular应用程序中模型所需的唯一操作纯粹是表现性的。