AngularJS: обещание контроллера запускает новый цикл дайджеста и дополнительные вызовы - PullRequest
0 голосов
/ 18 июня 2020

у нас есть веб-страница, состоящая из независимых карточек. Каждый из них - это html с angularjs контроллерами. Они находятся на вкладке, которую пользователь может открыть в браузере (это не вкладка по умолчанию).

Все контроллеры наследуются от BaseController. В зависимости от статуса страницы отдельные карточки загружаются в одном из двух возможных режимов. Пользователь может переключаться между режимами.

До сих пор все карты загружались даже до того, как это требовалось, на несфокусированной вкладке, что замедляло работу пользователя.

Мы внесли изменения в загружать их только по запросу.

Когда пользователь активирует вкладку, событие loadDataInModeOne отправляется в BaseController, который затем вызывает loadDataInModeOne на каждом контроллере.

Операции представляют собой смесь синхронных операций c и asyn c, мы заставили вызов вернуть обещание и дождаться завершения всех обещаний на вкладке.

То же самое применяется при переключении режима (loadDataInModeTwo).

Все работает нормально, но разрешение обещания запускает новый дайджест l oop, который заставляет повторно выбирать данные в каждом конструкторе (в противном случае обновление данных не отображалось бы на экране). Это заканчивается тем, что дублируются все внутренние вызовы, выполняемые картами.

Есть ли здесь альтернатива?

Я могу думать, что кеширование вызовов (при наличии механизма аннулирования) - это достойный вариант, но я бы предпочел его избежать, если будет лучший.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...