2014-10-10 20 views
2

在移動到我的頁面之前嘗試解析某些數據時,我強制解析承諾,將其轉換爲自定義對象,然後嘗試將自定義對象返回給我的解析對象。AngularJS ui-router解析不返回自定義值

  .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 2014-10-10 12:48:48

+0

增加了額外的約一個必須解決 – Jan 2014-10-10 13:00:34

0

@alfrescian

你幾乎是正確的。我改變了延期。$承諾deferred.promise

感謝

+0

YUB,只有$資源對象有$承諾的服務電話。修正了我的答案。 – alfrescian 2014-10-10 15:02:18