Управление связью между независимыми директивами AngularJS независимо

Это скорее организационный подход к решению этой проблемы, а не прямое решение. Сам мой вопрос заключается в том, что если у меня есть две директивы, которые не зависят друг от друга и могут работать независимо друг от друга в своих целях. Но если одна из директив присутствует, тогда другую нужно выполнить, как только другая будет готова. Тогда в таком случае, что было бы логичным способом убедиться, что он работает таким образом, без необходимости жестко кодировать какие-либо вызовы функций или события?

Допустим, например, у вас есть одна директива, которая строит какую-то сетку:

angular.module('App').directive('appGrid',function() {
  return function($scope, element) {
    $scope.rows = ...
  };
});

Затем у меня есть другая директива, которая делает элемент горизонтально прокручиваемым:

angular.module('App').directive('appPane',function() {
  return function($scope, element) {
    element.attachHorizontalScroll();
  };
});

Так что пример моего HTML будет выглядеть так:


  
    
      {{ cell.data }}
    
  

В основномappPane Директива должна работать послеappGrid Директива выполнена, и таблица готова.

Одним из решений, которое я могу придумать, является просмотр данных, чтобы увидеть, когда они будут готовы, используя$scope.$watch метод, но это создает проблему, так как изменение может происходить несколько раз, и это было бы плохим дизайном для избыточного обновления страницы, а также создает проблему, если несколько директив записывают в одну и ту же переменную области наблюдения, которая просматривается.

Другое решение состоит в том, чтобы первая директива выдавала событие (что-то вроде elementReady), а затем взяла верх над 2-й директивой. Но что если первая директива нет там? Тогда как 2-я директива узнает, когда это делать?с работой? Может быть другая директива, которая в основном является пустой директивой, которая просто запускает событие для всех других элементов, но это немного хак. Также, что произойдет, если несколько других директив запускаютelementReady событие?

Еще одно решение - создать третью директиву, которая разделяет логику между двумя директивами через общую службу. Но это делает 3-ю директиву полностью зависимой как от других директив, так и от общих служб между ними. Для этого также требуется больше ненужного тестирующего кода, а также реального кода для написания директивы (гораздо больше кода по сравнению со 2-м решением, для которого потребовалось бы всего одна + одна строка кода).

Есть идеи?

Ответы на вопрос(3)

Ваш ответ на вопрос