Задать вопрос
@siarheipashkevich
developer

Как «правильно» передать данные в родительский контроллер из дочернего?

Доброго всем времени.

Возник вопрос о наиболее правильном подходе разработки приложения на angular.js, что бы в дальнейшем не пришлось очень сильно мучаться при поддержке приложения и не изменять многих вещей.

В проекте используется ui-router для состояний.

Приложение имеет следующую иерархию:
- root (root)
- home (root.home)
- sale (root.sale)
- list (root.sale.list)
- single (root.sale.single)

Модуль root это глобальный модуль всего проекта (куда можно будет вынести обобщённые события\действия для всего проекта).
Модули home и sale это две независимые страницы и у них разные структуры страниц, но шаблон со странице sale очень идентичен со многими остальными страницыми и было решено сделать эту страницу ещё одним предком и вынести туда всё общее для всех дочерних страниц (header, footer и контент разделённый на две части: статика и блок куда будут подгружаться дочерние старницы). Теперь на странице sale есть блок в который необходимо передавать данные из всех дочерних страниц, как лучше всего это сделать используя ui-router или более элегантные методы, что бы в дальнейшем это было не очень больно исправлять )

Ниже есть пример о чём я писал выше (для передачи используются события $emit & $on навешенные на $rootScope):
Пример

Хорошо ли использовать такой подход с вложенностями и корневым модулем root?

Спасибо.
  • Вопрос задан
  • 371 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
правильно будет не передавать их вверх вообще. Это чуть более чем странно что родитель знает о деталях детей. Он вообще о них ничего знать не должен. Для того что вы хотите сделать были введены вложенные вьюшки (nested views).

события это круто и удобно, но очень легко превратить все в неподдерживаемый трэш как только система разрастется до хоть сколько нибудь большого масштаба. Завязывать на них какую-то логику вообще гиблое дело. В крайнем случае у вас есть два пути:
- кастыль в виде data у родительского стэйта (данные стэйта наследуются, подробнее в документации)
- заиметь сервис у которого будет актуальная информация
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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