Я написал две пользовательские директивы.
Их имена - приложение-контент и элемент приложения-контента. Предполагается, что они будут использоваться в рамках некоторых будущих проектов, чтобы дать этим проектам базовый эшафот с базовым стилем. Они будут частью модуля. Предполагается, что они должны быть вложены следующим образом:
<app-content>
<app-content-item>
html...
</app-content-item>
<app-content-item>
html...
</app-content-item>
.
.
<app-content>
В рамках функции связи приложения-контента я вызываю метод, который ищет дочерние директивы для элементов app-content-item-tags и устанавливает ширину и высоту этих элементов с использованием определенного алгоритма и доступного пространства в приложении-контент- контейнер.
Что касается, как я знаю, желаемого макета не может быть достигнуто только с помощью css. Должен быть задействован какой-то javascript.
Прямо сейчас я отказываюсь от углового $ timeout-сервиса без задержки, чтобы вызывать функцию после выданной директивы. Этот фрагмент кода взят из функции ссылок на директивы app-content:
$timeout(function(){
scaleLayout();
});
Пока это прекрасно.
Проблема в том, что контейнеры app-content-item-контейнеры будут заполняться приложением, используя мой компонент. Это означает, что содержимое контейнеров app-content-item может меняться в любое время. Если они меняются, функция scaleLayout() должна быть вызвана снова.
Я не хочу, чтобы пользователь моего компонента отвечал за вызов метода. Компонент должен быть черным ящиком для пользователя как можно больше.
Для пользователя моего компонента он должен чувствовать, что это делается css, поэтому ему не нужно беспокоиться об этом.
До сих пор я пробовал следующие подходы:
Используйте обработчики событий. При внесении изменений:
$rootScope.$broadcast("updateLayout");
А для слушателя:
$scope.$on('updateLayout', function () {
//layout stuff here
});