У меня возникли проблемы с выяснением того, как заставить routeProvider ждать, пока не вернется удаленный вызов. Лучшим решением, которое я видел, был пример здесь: отсрочка изменения углового маршрута . К сожалению, когда я устал применять этот пример к своему собственному коду, привязка сработала до фактической загрузки данных. Кто-нибудь знает другой пример, в котором используется новый синтаксис Resource из angular 1.1.5 (доступ к $promise можно получить напрямую)?
Вот как выглядит мой код:
var productModule = angular.module('productModule', ['ngResource', 'ngLocale']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view1', {templateUrl: 'partials/partial1.html',
controller: 'ResourceCtrl as appController' ,
resolve:
{
productData: function($resource)
{
console.log(["calling service"]);
return $resource(Services.ProductServices.PATH).query(null,
function(data){
console.log(["call succeeded"]);
},
function(data){
console.log(["calling failed"]);
}).$promise;
}
}
});
$routeProvider.when('/view2', {templateUrl: 'partials/partial2.html'});
$routeProvider.otherwise({redirectTo: '/view1'});
}]) ;
productModule.controller('ResourceCtrl','$scope','productData',function($scope,productData) {
$scope.productData = productData;
console.log(["promise resolved"]);
}]);
Если я запущу этот код, консоль отобразит:
- служба вызова
- обещание решено
- звонок удался