D
D
Dmitrii Solovev2016-06-19 19:58:26
Angular
Dmitrii Solovev, 2016-06-19 19:58:26

How to update shared widgets in Angular?

Предположим есть приложение написанное на компонентах (angular.component). Там к примеру несколько стэйтов, показывающих транзакции, категории и аккаунты, и есть сайдебар в котором висит общий виджет, отображающий состояние аккаунтов.
виджет это компонент, и берет данные из своего сервиса, который в свою очередь использует $http.
Так вот, при создании изменении или изменении транзакции, или аккаунта, инфо в этом виджете надо обновлять с сервера.
Конечно можно накопипастить 6 раз к каждому из требуемых запросов, обновление и виджета следом, в стиле:
TransactionService.update(this.transaction).then(() => SidebarService.refreshStats());
Но вдруг появятся еще виджеты? либо другие стэйты и условия для обновления, хочется найти какое нибудь более правильное решение.
Пробовал реализовывать это через $http интерсепторы, чтобы по каждому апдейту, на определнном URL, шло это обновление, но туда не удавалось заинжектить сервис этого виджета, так как получалась ошибка Circular dependency, $http провайдера.
Какие есть еще решения, для обновления данных, для каких то зависящих друг от друга компонента?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
Сергей Протько, 2016-06-19
@Fesor

Какие есть еще решения, для обновления данных, для каких то зависящих друг от друга компонента?

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question