Angularjs как правильнее сделать загрузочный экран?

Приветствую, такой вопрос, есть вот у нас сервис stateManager и init,
init запускается после того как все сервисы прогрузились, и запускает инициализацию всех основных сервисов оперируя очередью сервисов в stateManager, и т.е. за время пока все это делается нам нужно отображение загрузочного экрана. По началу он был просто как stateManager -> $rootScope.loaders.init.active = true. В темплайте от этой переменной зависят два элемента, первое сам загрузчик и второй сам контент страницы. Но вот задался вопросом - как если что мне контролировать загрузочник, не сервисом же это делать, нужен контроллер, но тогда и по логике вроде как его отображение должен отвечать контроллер, а не сервис. Но незадача, ведь еще и контент зависит от rootScope переменной, а контроллер этот же к нему приделывать не хочется.
Как правильнее всего решить эту задачу? Все же контролировать отображение через rootScope? Но тогда и в контроллере придется например еще и с rootScope работать, например если хотим отложить появление на N сек после всей инициализации.
Заранее благодарен.
  • Вопрос задан
  • 2475 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ничего не понял... Если под загрузочным экраном вы подразумеваете спиннер, можно сделать его глобально на ивентах (например показывать спиннер по $stateChangeStart и прятать по $stateChangeSuccess или $stateChangeError. Так же такие вещи стоит делать в ресолверах для контроллеров. Они запускаются как раз таки между $staeChangeStart и Success и возвращают промисы. Вы можете просто вклиниться в цепочку промисов и отловить что произошло что-то.

Управление спиннером через сервисы, да, которые управляют директивой, $rootScope тоже может быть замешан там.

Можно по всякому сделать собственно...
Ответ написан
AMar4enko
@AMar4enko
Используйте модуль deferredBootstrap, чтобы загрузить все необходимые данные перед инициализацией приложения, не надо будет городить эти самые очереди.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы