Построение простой панели управления в AngularJS + Rest API.Функция AngularJS доступна для нескольких контроллеров
Построен простой завод, который делает запрос API (GET, POST)
и возвращает необходимые данные для успешного обратного вызова. Данные возврата должны быть обработаны и изменены $scope
, так как API может возвращать ошибки поля на стороне сервера.
Я не могу построить обработку/изменение $scope
на заводе, так как завод не имеет (и не должен) иметь доступ к области. Я бы предпочел не обрабатывать/применять в обратном вызове успеха, поскольку он будет повторяющимся (один раз для запроса API).
Что является лучшим «Угловым способом» для решения этой проблемы?
Одним из возможных решений является наличие функции вне приложения с угловым выражением, а затем просто передать ему объем и необходимые данные.
Это ощущение плохой работы (см. Ниже).
myApp.controller("saveForm", ["$scope", "api", function($scope, api), function() {
...
$scope.submit = function() {
api("POST", url, $scope.data, function(data) {
//onSuccess
processData($scope, data);
});
}
...
}]);
myApp.factory('api', ['$http', function($http) {
return function(method, url, input, success, error) {
//Retrieve data from API. Note that factory DOES NOT have access to $scope.
$http(...
}
}]);
var processData = function(scope, data) {
angular.forEach(data, function(value, key)) {
scope....
}
}
Это действительно работает, однако у меня есть несколько контроллеров, которым нужно будет использовать processData(). С этой реализацией я должен был бы включить функцию в каждый контроллер; дублирующий код. – Jason
Попробуйте это: http://stackoverflow.com/questions/19614545/how-can-i-add-some-small-utility-functions-to-my-angularjs-application – Kolby
Хорошо, поэтому в этом случае вы бы порекомендовали решение, которое я дал, но чувствовал себя грязным, поскольку он существовал за пределами приложения «Угловое». – Jason