2014-10-10 4 views
2

При попытке разрешить некоторые данные перед переходом на мою страницу я принудительно разрешаю обещание, конвертирую его в пользовательский объект, и я пытаюсь вернуть пользовательский объект в свой объект разрешения.Угловой JSU-маршрутизатор не возвращает пользовательское значение

  .state("trip.detail", { 
       url: '/:tripId', 
       templateUrl: 'partials/trip/detail.html', 
       controller: 'TripDetailController', 
       resolve: { 
        trainData: function (TripService, $stateParams, $q) { 
         return TripService.getTripById($stateParams.tripId,function (data) { 
          console.log("received: " + data); 
          return { 
           "relativeTrainId": data.trainId, 
           "from": new Date(data.departure).toISOString(), 
           "to": new Date(data.arrival).toISOString(), 
           "projectId": data.projectId, 
           "isTrip": true, 
           "tripId": data.id, 
           "trajectory": data.trajectory, 
           "statistics": data.statistics 
          } 
         }).$promise; 
        } 
       } 
      }); 

Это все работает, за исключением «trainData», который в настоящее время вводится в мой контроллер является actualy значение «данные», а не на заказ один, что я создаю.

Что происходит?

Экстра Информация о TripService:

services.factory ('TripService', функция ($) {ресурсов

function TripService() { 
    this.tripResource = $resource('rest/trip/:tripId'); 
} 


TripService.prototype.getTrips = function (start, end, project, trainIds, callback) { 
    return this.tripsResource.query({ 
     projectId: project, 
     trainIds: trainIds, 
     from: start, 
     to: end 
    }, callback) 
} 

TripService.prototype.getTripById = function (tripId, callback) { 
    return this.tripResource.get({ 
     tripId: tripId 
    }, callback); 
} 

return new TripService(); 

});

ответ

1

вы должны создать свое собственное обещание и решить его с помощью пользовательского объекта:

 .state("trip.detail", { 
      url: '/:tripId', 
      templateUrl: 'partials/trip/detail.html', 
      controller: 'TripDetailController', 
      resolve: { 
       trainData: function (TripService, $stateParams, $q) { 
        var deferred = $q.defer(); 
        TripService.getTripById($stateParams.tripId,function (data) { 
         console.log("received: " + data); 
         deferred.resolve({ 
          "relativeTrainId": data.trainId, 
          "from": new Date(data.departure).toISOString(), 
          "to": new Date(data.arrival).toISOString(), 
          "projectId": data.projectId, 
          "isTrip": true, 
          "tripId": data.id, 
          "trajectory": data.trajectory, 
          "statistics": data.statistics 
         }); 
        }); 
        return deferred.promise; 
       } 
      } 
     }); 
+0

trainData неопределен – Jan

+0

Добавлен дополнительный о вызове службы, который должен быть решен – Jan

0

@alfrescian

Вы были почти правильно. Я изменил отложенный. $ Обещание deferred.promise

Благодаря

+0

yub, только $ объекты ресурсов имеют $ обещание. Исправлен мой ответ. – alfrescian

Смежные вопросы