Я создаю приложение, которое извлекает данные календаря с помощью вызова AJAX в $ rootScope. Я использую этот объект в разных контроллерах, и мне нужно иметь возможность правильно его анализировать, поскольку в нем есть различные объекты. Где я должен хранить логику для ее анализа? Я использовал его в корневом контроллере как функции $ rootScope, но я чувствую, что это прецедент для фабрики. Однако, похоже, я не могу (и не чувствую, что было бы неплохо) получить доступ к фабричным методам из шаблонов.Где модель логики манипуляции в AngularJS?
На данный момент у меня есть следующий завод:
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);
}
}
]);
И это работает, но я просто не уверен, если я отслеживаю лучшие практики.
Итак, должны ли эти функции анализировать модель в корневом каталоге или где-то еще?
Поместите его в сервисный модуль и введите этот модуль в свои контроллеры. –
Я бы построил фабрику «Человек». С вашего контроллера вы можете вызвать Person.get (someIdentifier), который будет загружать один и тот же объект Person с данными или возвращать отдельную модель экземпляра. Взгляните на Угловые ресурсы. Я считаю, что они немного иллюстрируют концепцию для вас. –