Я настраиваю приложение AngularJS, и у меня есть небольшая проблема, гарантирующая, что мои обещания стреляют до загрузки контроллеров. Я понимаю, что это можно сделать. Немного кода:AngularJS: Маршруты с несколькими разрешениями с использованием Сервисов не срабатывают
Во-первых, вот код маршрутизатора:
$routeProvider
.when('/apage', {
controller: 'APageController',
templateUrl: 'app/apage/apage.view.html',
requiresLogin: true,
resolve: {
"data": function($q, data1Service, data2Service) {
var data1 = data1Service.getData();
var data2 = data2Service.getData();
return $q.all({
data1: data1.$promise,
data2: data2.$promise});
}
}
})
...
Вот одна из сервисных функций (как похожи) ...
function getData() {
var deferred = $q.defer();
$http(req)
.success(function(data, status, headers, config) {
// store data ...
deferred.resolve(1); // just a flag to say it worked
$rootScope.$apply();
})
.error(function(data, status, headers, config) {
deferred.resolve(0);
$rootScope.$apply();
});
return deferred.promise;
}
А вот код контроллера ...
angular
.module('app')
.controller('APageController', APageController);
APageController.$inject = [... 'data'];
function APageController(... data) {
var data1 = data.data1;
var data2 = data.data2;
...
Все три находятся в разных файлах, но часть того же модуля. Должна быть какая-то концепция, которую я пропускаю. Есть ли что-нибудь очевидное здесь, чтобы объяснить, почему мои обещания о решении не стреляют?
спасибо.
Спасибо PSL. Я сделал изменение, чтобы использовать массив, как вы предложили, и снова попытался, и я увидел следующую погрешность в архиве консоли: https://docs.angularjs.org/error/$rootScope/inprog?p0=$digest. Итак, я удалил инструкции rootScope из служб. Заявления о разрешении теперь запускаются, но ПОСЛЕ запуска контроллера. Итак, я попробовал вторую идею использования двух разрешений. К сожалению, это тот же результат: контроллер запускается до завершения разрешений. – Marshee
@ Marshee ПОЧЕМУ вы используете *. $ Обещают? я только что видел ваше служение, вы просто уже возвращаете обещание. См. Мое редактирование. – PSL
Я думал, что это будет правильно. Но вы правы. Я слишком многообещаю? Я удалил «. Обещание» из заявления о разрешении ... и ... вуаля ... он работает. Спасибо PSL за помощь! – Marshee