@webnikler
Frontend developer (Angular)

Как правильно управлять данными в angular 1.x?

Всем привет!
Меня мучает такой вопрос: Как правильно управлять данными в angularJS 1.x ?
Прием ,который я использую сейчас:
angular.module('app')
  .service( 'UserService', UserService )
  .controller('UserController', UserController);

function UserService() {
  this.user = {
    settings: {
      name: 'nikler'
    }
  }
}

function UserController(UserService) {
  this.user = UserService.user;
}


Меняем например user.settings.name в сервисе ,изменения отобразятся в контроллере и наоборот.
Видел где-то так же реализации с геттерами и сеттерами у сервиса. Но тогда непонятно ,как наладить механизм синхронизации ,чтобы изменения ,произошедшие в одной сущности тут же отобразились на другой.
Подскажите пожалуйста ,какие есть способы организации управления данными в angular 1.x ?
Так же где-то видел упоминание про связку angular + redux. Кто ее использовал ,подскажите ,насколько это удобно ,не увеличивает ли это сложность? (с redux плохо знаком).
Возможно плохо гуглил ,но гугл не очень помог. Заранее спасибо за помощь.
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
uaKorona
@uaKorona
Front-End разработчик
Хорошо, когда зоны ответственности распределены:
Контроллер отвечает за отображение данных и пользовательский ввод.
А сервис отвечает за обновление и хранение данных.

В таком подходе очень лего реализовать такие паттерны, как отмена изменений пользователя и возврат к предыдущей версии. Так как она всегда хранится в сервисе.
Или например, предупреждать пользователя, что есть несохраненные данные - перед уходом с формы, так как можно сравнить модель из контроллера с версией модели в сервисе.

По хорошему - должна быть одна точка изменений данных -> Сервис, а контроллер должен работать с их копией
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alexiusp
@alexiusp
senior frontend developer
Можно сделать по-разному. Главное с самого начала решить, кто будет вносить изменения в данные. Я бы рекомендовал, чтобы изменения вносились только в одном месте (например в указанном в примере контроллере). Если у вас данные будут менять все кому не лень - другие сервисы, директивы, другие вложенные контроллеры, то вы очень скоро потеряете контроль над тем, что происходит у вас в приложении и откуда растут ноги у изменений. Подход с единственным ответственным за изменение данных сильно облегчает жизнь в приложениях со сложной архитектурой, хотя и требует иногда лишнего прокидывания обработчиков событий вверх по иерархии компонентов.
Ответ написан
@emp1re
Меняеться обьект потому что он один и тот же. Контролер или сервис тут не причем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы