AngularJS: как заставить директиву обновляться?

У меня есть директива пользовательского редактора, которая отображает пользовательский интерфейс для редактирования $scope.User. Когда $scope.User имеет значение null, редактор находится в режиме «Создать», что означает, что новый пользователь будет создан после отправки данных.

Кроме того, директива выполнит некоторый расчет макета. Проблема в том, что перед показом редактора расчет макета неверен. Например, в Firefox, когда элемент невидим, высота всегда равна 0. Другими словами, когда директива скомпилирована и связана, расположение элементов неверно.

Мой вопрос: как заставить директиву обновляться, когда она становится видимой?

Я пробовал следующие способы:

  1. Изменение $scope.User Директива следит за $scope.User. Его изменение может дать директиве возможность обновиться. Но это не очень хорошая идея, при создании нового пользователя он должен быть нулевым.

  2. Добавление новой «видимой» переменной в $scope и наблюдение за ней Проблема в том, что родительский элемент директивы (и родитель родителя) также может стать видимым и невидимым. Есть ли способ получить уведомление?

Любая хорошая идея?


person Zach    schedule 24.05.2014    source источник


Ответы (1)


Добавьте ng-if к элементу вашей директивы:

<my-directive ng-if="UserCreated"></my-directive>

и инициировать его добавление в DOM с помощью другого события:

<button ng-click="UserCreated = !UserCreated">Toggle User</button>

Демо

Здесь функция ссылки будет запущена в точке, где выражение ng-if истинно.

Я сделал некоторые предположения о том, что вы пытаетесь сделать для этого ответа. Если он не соответствует тому, что вы ищете, дополните свой вопрос образцом кода и, если возможно, упрощенным Plunker чтобы лучше продемонстрировать, что вы собираетесь делать.

person Marc Kline    schedule 24.05.2014