#javascript #angularjs
В стайл-гайде по Ангуляру от Тода Мотто есть пример использования сервиса в контроллере "Presentational logic only (MVVM)": // recommended function MainCtrl (UserService) { var vm = this; UserService .getUsers() .then(function (response) { vm.users = response; }); vm.removeUser = function (user, index) { UserService .removeUser(user) .then(function (response) { vm.users.splice(index, 1); }); }; } Я давно подозревал, что делаю что-то крайне не модно, т.к. мои фабрики настолько автономны, что контроллер остается почти без работы. Использую фабрики так: function UserService () { var api = { loaded: false getData: getData } return api; function getData() { // Получение данных api.loaded = true; } } function MainCtrl (UserService) { var vm = this; vm.userService = UserService; // Использую api фабрики в контроллере, если нужно получить некие входные данные UserService.getData() } Дальше работаю с фабрикой напрямую в шаблоне, вызывая нужные методы в директивах(ng-click, ng-mouseover, ng-hide, ...) То есть получается просто пробрасываю фабрику во view через контроллер. Помогите культивировать в мозгу логику по которой нужно отделять работу фабрики от работы контроллера.
Ответы
Ответ 1
Попробую объяснить: Контроллеры предназначены для обрабатывания событий от пользователя (ng-click, ng-change, и других ng директив, весь список здесь ). Фабрики или сервисы синглтоны(а чем они отличаются читать тут) , которые предназначены для получения необходимых данных с БД и кукисов, или же мы сами можем сохранять в них необходимые данные, чтобы потом использовать их по нашему усмотрению. Ангуляр это MVW(Model-View-Whatever) фреймворк, это означает, что мы можем использовать и MVC и MVVM паттерны(статья). Но структуру работы буду объяснять по MVC. Основная схема: Контроллер получает событие от пользователя, потом берет нам необходимые данные с Фабрики, сохраняет все эти данные в $scope контроллера, и после чего отображает все это в View.Ответ 2
В контроллер помещается логика куска приложения которая относится только к данному контроллеру. В сервис-фабрику помещаются методы, данные которые не содержат логики, а возвращают примерно всегда одни и те же данные и могут использоваться (вызываться) в любой части приложения. Обычно сервис инжектится в контроллер, из сервиса получаются нужные данные, в зависимости от принятого в приложении подхода эти данные записываются либо в св-во скоупа либо в св-во контроллера (Controller As syntax). И только потом к ним можно обратиться из шаблона.
Комментариев нет:
Отправить комментарий