2015-07-11 59 views
0

我已經從使用ngRoute轉移到ui-router。我試圖解決在控制器中使用的路由中的Factory調用,但在輸出到控制檯時未定義。這裏是工廠:AngularJS ui-router解析未定義

'use strict'; 

angular.module('angular10App') 

.factory('AirportService', function ($http) { 

return { 

    getAirports: function() { 

     var airports = $http.get('../json/airports.json') 
      .then(function (response) { 

       console.log(response.data); //Outputs an array of objects 

       return response.data; 
      }); 
    } 
}); 

這裏是路線:

'use strict'; 

angular.module('angular10App') 
    .config(function ($stateProvider) { 
    $stateProvider 
     .state('selectFlights', { 
      url: '/select_flights', 
      templateUrl: 'app/selectFlights/selectFlights.html', 
      controller: 'SelectFlightsCtrl', 
      resolve: { 

       AirportService: 'AirportService', 

       airports: function (AirportService) { 
        return AirportService.getAirports(); 
       } 
      }, 
     }); 
    }); 

,這裏是控制器:

'use strict'; 
angular.module('angular10App') 
.controller('SelectFlightsCtrl', function ($scope, airports) { 

$scope.selectedAirport = null; 

    $scope.airports = airports; 
    console.log($scope.airports); //undefined 
}); 

回答

3

試着改變你的決心塊這樣的:

resolve: { 
    airports: function (AirportService) { 
     return AirportService.getAirports(); 
    } 
} 

並修改getAirPorts功能分爲:

function getAirports() { 
    // You need to return the $http promise (or in your case, 'var airports'); 
    return $http.get('../json/airports.json') 
    .then(function (response) { 
     console.log(response.data); //Outputs an array of objects 
     return response.data; 
    });   
} 
+0

還未定義! – AngularBoy

+0

對不起,我沒有太注意getAirports函數,因爲Resolve塊看起來很奇怪。在我看來,你正在返回一個正在創建一個變量的函數,但實際上並沒有返回$ http promise。雖然我可能是錯的。 –

+1

就是這樣。這是返回$ http.get,這是錯誤的。謝謝。 – AngularBoy