Я пытаюсь выполнить этот ответ 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 для прослушивания, когда преобразованные данные готовы в службе. Даже это кажется немного переполненным ( сервис не выполняет асинхронные вызовы).