Vadiok
@Vadiok
Веб разработчик

Как дождаться загрузки основных данных до начала обработки пути?

В app.js у меня находится примерно такой код:
vtTmModule.config(function ($routeProvider, $locationProvider, $httpProvider) {
	$routeProvider
		.when('/someUrl', {
			controller: 'SomeController'
			,templateUrl: 'someTpl.html'
			,resolve: {}
		})
		.when('/anotherUrl', {
			controller: 'AnotherController'
			,templateUrl: 'anotherTpl.html'
			,resolve: {}
		});
}).run(function ($rootScope, $routeParams, $location, UserLoader) {
	UserLoader.then(function(result) {
		$rootScope.users = result;
	});
	// Получение прочих данных с сервера через промисы
});

Соответственно, при обновлении страницы выполняется run(...), а также загрузка шаблона и контроллера для соответствующего урла. В run(...) я пытаюсь загрузить общие данные, используемые для большинства путей. Проблема в том, что эти данные иногда загружаются позже контроллеров и шаблонов, в которых они должны использоваться.
Как не допустить обработку роутинга до того, как все данные будут получены в run(...)?
  • Вопрос задан
  • 946 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1) выносим эту логику в сервис
2) храним в сервисе промис
3) используем этот промис в ресолверах
Ответ написан
Vadiok
@Vadiok Автор вопроса
Веб разработчик
В общем, решил следующим образом:

1. В resolve для каждого пути добавляю
,resolve: {
  /* ... */
  requiredGlobalData: function(testGlobalData) {return testGlobalData();}
}


2. В сервисы:
appNameService.factory('testGlobalData', function($q, someLoader1, someLoader2) {
	return function() {
		return $q.all([someLoader1,someLoader2]).then(function(results){});
	};
});


someLoader'ы выглядят упрощенно так:
appNameService.factory('someLoader1', function($http, $q) {
	var dataUrl = '/someUrl1/';
	return $http.get(dataUrl).then(function(response) {
		return response.data? response.data : $q.reject('Ошибка получения данных');
	}, function(err){return $q.reject(err);});
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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