Я пытаюсь выполнить этот ответ SO, объясняя, как рендерировать рекурсивную структуру JSON с помощью директивы. Однако, в отличие от предоставленного ответа, мои данные не известны при загрузке DOM и Angular выполняется в первый раз.
Вместо этого мои данные извлекаются из поля ввода HTML и сохраняются в службе Angular (когда пользователь отправляет форму).
Как сохранить актуальную директиву Angular при изменении данных службы?
Обновление в ответ на ответ
@musically_ut предоставил отличный ответ, который помог, но выявил связанную с этим проблему, предотвратив реализацию (обновленный здесь).
Директива отображает HTML, содержащий Angular {{expressions}}
, которые обращаются к данным, хранящимся в $scope
. Поскольку исходное решение было $watch
, когда служба предоставила данные. Как я могу обеспечить добавление "новых" данных в $scope
до отображения директивы?
Обзор архитектуры и потока:
-
ControllerA
→ Получить вход от пользователя -
ControllerA
→ Использовать службу для преобразования данных -
ControllerB
→$watch
для изменений службы -
Directive
→$watch
для изменений службы -
ControllerB
→ Добавить данные в$scope
-
Directive
→ Отобразить преобразованные данные (из службы), используя директивы
Проблема заключается в шагах 5 и 6. Директива отображает {{expressions}}
, прежде чем ControllerB добавит данные в $scope
. Даже если это сработало, оно кажется слишком сложным и "взломанным".
На самом деле, чтобы регрессировать, я использую $watch
в ControllerB для прослушивания, когда преобразованные данные готовы в службе. Даже это кажется немного переполненным ( сервис не выполняет асинхронные вызовы).