В настоящее время я работаю над приложением, созданным с помощью Angular 1.x, и я хотел бы знать, какая из лучших практик заключается в том, чтобы сообщать о двух разных компонентах, которые изначально работали отдельно в другом модуле приложения. Один из них - селектор, а другой - слайдер.
В принципе, селектор является директивой с функциональностью, определенной в ссылке. То же самое для слайдера. Идея состоит в том, чтобы обновлять слайдер новыми элементами каждый раз, когда я нажимаю один из вариантов (ng-click) в селекторе.
Это первый раз, когда я должен реализовать эту коммуникационную концепцию в Angular, и я не знаю, лучше ли работать с внешним сервисом, беря и сохраняя данные от обоих компонентов, используя события или контроллеры внутри директив. Любые рекомендации приветствуются.
РЕДАКТИРОВАТЬ:
Здесь я показываю фрагмент кода моей директивы селектора. В основном, я хочу изменить свойство выделения, когда в ссылке есть ng-click (my toggle()):
angular.module('ngExploratory')
.directive('xplrSelector', (PATH, XplrBaseObject, IdentifierService, DataService) ->
templateUrl: "#{PATH}components/selector/selector.html"
restrict: 'E'
replace: true
transclude: true
scope:
xplrId: '@'
xplrJoin: '='
headers: '='
content: '='
limit: '='
link: (scope, element, attrs) ->
XplrBaseObject.extend scope, element, attrs
scope.data = {} if not scope.data?
scope.toggle = () ->
scope.id = IdentifierService.initialize element
scope.value = DataService.get scope.id
scope.data.selected = !scope.data.selected
scope.commit()
return
)
Затем, как только этот клик/выбор будет выполнен, я хочу запустить и инициализировать свой компонент слайдера (код для этого слишком длинный...). Все функциональные возможности ползунка снова определены в ссылке в директиве. Тогда нет контроллеров.
Лично я предпочитаю использовать службы для совместного использования данных (и потенциального поведения). Если возможно, я стараюсь использовать API службы и использовать события в качестве крайней меры. Но, конечно, каждый сценарий отличается... :-)