引用其他服务的 AngularJS 个范围

Referencing AngularJS Scopes with other Services

我正在做一个 AngularJS 项目,但我的服务遇到了一些问题。我创建了一项具有 returns 两个功能的服务。一个 returns 用户的当前位置,另一个 returns API URL。我面临的问题是 API URL 需要纬度和经度。我想获取 当前位置数据 并将其传递到 URL 并将数据绑定到我的视图。如何将每个服务的范围引用到另一个服务? 这是我的代码:

angular.module('myApp', [])

.controller('HomeCtrl', ['$scope', '$q', '$http', 'myService',
  function($scope, $q, $http, myService) {

    myService.getLocation().then(function(data) {
      $scope.lat = data.coords.latitude;
      $scope.long = data.coords.longitude;
      console.log($scope.lat, $scope.long);
    });
    myService.getAirports().then(function(data) {

    });
  }
])

//MYSERVICE FACTORY
.factory('myService', function($http, $q, $cordovaGeolocation) {
  return {
    getLocation: function() {
      var deferred = $q.defer();
      $cordovaGeolocation.getCurrentPosition().then(function(position) {
        var lat = position.coords.latitude;
        console.log(lat);
        deferred.resolve(position)
      });
      return deferred.promise;
    },


    getAirports: function() {
      var deferred = $q.defer();
      var url = 'https://api.flightstats.com/flex/airports/rest/v1/jsonp/withinRadius/' + PLACE LONGITUDE HERE + '/' + PLACE LONGITUDE HERE + '/10?appId=02a5e867&appKey=1f2075112529890985b1dd8ea0f0a419' + '&callback=JSON_CALLBACK';
      var config = {
        method: 'GET',
        callback: 'JSON_CALLBACK'
      }
      $http.jsonp(url, config)
        .then(function(data) {
          var lat = data.data.airports[0].latitude;
          deferred.resolve(data)
        });
      return deferred.promise;
    }
  }
});

JSFiddle

如果我能做些什么来简化我的代码,请告诉我。

您只需将对第二个服务的调用放在第一个服务的 then 方法中并传入 lat/lng 数据:

myService.getLocation().then(function(data){
    $scope.lat = data.coords.latitude;
    $scope.long = data.coords.longitude;
    console.log($scope.lat, $scope.long);
    myService.getAirports($scope.lat, $scope.long).then(function(data){

    });
});

那么你可以直接使用getAirports方法中的数据:

getAirports: function(lat, lng) {
 ....
 var url = 'https://api.flightstats.com/flex/airports/rest/v1/jsonp/withinRadius/'+ lat+'/'+lng+'/10?appId=02a5e867&appKey=1f2075112529890985b1dd8ea0f0a419' + '&callback=JSON_CALLBACK';
 ....
}