Я прочитал несколько статей о функции разрешения $routeprovider. Основная идея исходит из этого репозитория, созданного моим любимым разработчиком AngularJS Тоддом Мотто. https://github.com/toddmotto/angularjs-styleguide#controllers
// avoid
function MainCtrl (SomeService) {
var _this = this;
// unresolved
_this.something;
// resolved asynchronously
SomeService.doSomething().then(function (response) {
_this.something = response;
});
}
angular
.module('app')
.controller('MainCtrl', MainCtrl);
// recommended
function config ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
resolve: {
// resolve here
}
});
}
angular
.module('app')
.config(config);
Мне очень нравится, как маршрут разрешает все зависимости контроллера перед загрузкой контроллера. Это сохраняет код очень чистым. Однако если процесс разрешения займет значительное время, страница зависнет без визуальной обратной связи, пока все не завершит загрузку.
Прежде чем я переключился на использование разрешения $routeprovider, я помещал все в контроллер, а затем создавал директиву представления асинхронной загрузки. Директива будет отображать индикатор выполнения загрузки, пока все запросы $http загружают данные. Мне интересно, есть ли способ сохранить визуальную обратную связь, а также поместить все шаги разрешения в поставщика маршрутов.
Спасибо!