Где бизнес-логика заключается в угловых?

Скажем, нажав кнопку (в представлении), необходимо следующее: извлечь данные с сервера. Я смущен, есть ли бизнес-логика для

i) выберите данные и

ii) его проверка должна выполняться внутри контроллера или внутри factory (или службы)

Должен ли он быть помещен в factory или в контроллер? Пожалуйста, помогите!

Ответ 1

Назначение контроллеров - привязка данных к вашему представлению. Они не должны содержать никакой логики и просто общаться с вашими услугами.

homeModule.controller('homeCtrl',function($scope,Categories){
  $scope.categories = Categories.items;
});

Добавьте функцию в свою службу, которая извлекает данные и сохраняет их самостоятельно:

fetchAll: function(){

  var defer = $q.defer();
  var self = this;

  $http.get(URL})
    .then(function(res){
        self.data = res.data;
        defer.resolve();
    });

  return defer.promise;
},

(Обратите внимание, что это всего лишь один из возможных способов сделать что-то. Ничто не мешает вам возвращать данные, а не хранить их в службе. Сделайте то, что вам нужно.)

Если возможно, вам следует рассмотреть возможность получения данных до того, как ваш просмотр будет инициализирован. Поступая таким образом, вы можете обеспечить доступность необходимых данных, как только пользователь получит страницу.

См. $http-запрос перед запуском приложения AngularJS?

Дальнейшее чтение

https://docs.angularjs.org/guide/services (ознакомьтесь с полным руководством разработчика)

http://toddmotto.com/rethinking-angular-js-controllers/

Также я рекомендую официальный Учебник

Ответ 2

Вы должны поместить бизнес-логику в службу. Контроллеры должны просто брать данные из служб и связывать их с пользовательским интерфейсом.

Если вы хотите узнать больше о лучших практиках в angular, я рекомендую это видео на сайте multipalsight.com:

http://pluralsight.com/training/courses/TableOfContents?courseName=angular-best-practices&highlight=