У меня есть приложение AngularJS, которое захватывает данные с PHP через AJAX и позволяет пользователю редактировать его через несколько шагов.Отказ обработчика отсрочки
Структура приложения очень прост:
У меня есть главный контроллер, который загружается из ng-controller
директивы.
<div ng-controller="MainCtrl">
<!-- All my app take place here, -->
<!-- so all my others controllers are in MainCtrl scope -->
<div ng-view></div>
</div>
У меня есть один контроллер, редактируя шаги (например, общая информация, планировщик, проверка и т. Д.). Каждый контроллер загружается $routeProvider
(внутри области MainCtrl).
Моя проблема в том, что я загружаю (или обновляю) страницу, MainCtrl
делает запрос AJAX для извлечения данных для редактирования. Контроллер, подключенный к $routeProvider
, загружается до завершения запроса AJAX, поэтому я не могу использовать данные, захваченные MainCtrl
.
Я хочу отложить маршрут маршрутизации $ routeProvider, пока запрос AJAX не будет завершен. Я думаю, что мне нужно использовать провайдера $q
, но я не могу предотвратить загрузку маршрута.
Я попытался это (в MainCtrl
) и контроллер по-прежнему оказывается преждевременным:
$scope.$on('$routeChangeStart', function(event, current, previous) {
$scope.pathLoaded.promise.then(function() {
// Data loaded => render controller
return true;
});
// Stop controller rendering
return false;
});
И AJAX вызова определяется следующим образом:
$scope.pathLoaded = $q.defer();
// Edit existing path
$http.get(Routing.generate('innova_path_get_path', {id: EditorApp.pathId}))
.success(function (data) {
$scope.path = data;
$scope.pathLoaded.resolve();
})
.error(function(data, status) {
// TODO
});
Так что вопрос: действительно ли это хорошо способ достичь этого? И если да, как можно отложить перенос контроллера?
Спасибо за помощь.