Использование «разрешить» для ожидания результатов запроса в routeProvider

У меня возникли проблемы с выяснением того, как заставить 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"]);
}]);

Если я запущу этот код, консоль отобразит:

  • служба вызова
  • обещание решено
  • звонок удался

person pbuchheit    schedule 29.08.2013    source источник


Ответы (1)


Это должно быть так просто:

resolve: {
  productData: function(ProductServices) {
    return ProductServices.query().$promise.then(function(data){
      return data;
    });
  }
}

Если ваша служба выглядит примерно так:

myApp.factory('ProductServices', function($resource) {
  return $resource('/path/to/resource/:id', { id: '@id' });
});
person Valentin Klinghammer    schedule 27.02.2014