如何传递AngularUI谷歌地图对象到工厂或请求转换



我有一个REST服务,它返回我在AngularJS中使用$http的工厂消费的地理坐标。为了将这些坐标显示为标记,我需要创建google.maps.Marker对象,它同时包含位置和google.maps.Map对象。

我正试图找出在工厂或作为transformResponse的一部分进行这些数据转换的最佳方法。不幸的是,我使用的AngularUI maps指令将地图存储在本地作用域中。

向工厂或transformResponse提供Map对象的最佳方式是什么?

如果你坚持你的geocoordinates服务返回Marker s而不是geocoordinates,那么你有两个选项,我可以想到:

a)将地图传递给geocoordinates服务

angular.module('mapGuy', function($scope, geoService) {
  geoService.addMarkers($scope.map);
}).
factory('geoService', function($http) {
  var addMarkers = function(map) {
    $http.get('/path/to/geo/server').success(function(points) {
      angular.forEach(points, function(points) {
        new google.maps.Marker({
          map: map, position: new google.maps.LatLng(points.lat, points.long)
        })
      })
    });
  };
  return { addMarkers: addMarkers };
});

b)将地图粘贴在模块的$rootScope上,并将$rootScope注入服务

angular.module('mapGuy', function($scope, $rootScope, geoService) {
  $rootScope.map = $scope.map;
  geoService.addMarkers();
}).
factory('geoService', function($http, $rootScope) {
  var addMarkers = function() {
    $http.get('/path/to/geo/server').success(function(points) {
      angular.forEach(points, function(points) {
        new google.maps.Marker({
          map: $rootScope.map, position: new google.maps.LatLng(points.lat, points.long)
        })
      })
    });
  };
  return { addMarkers: addMarkers };
});

这是代码的大致草图。我正在从内存中提取谷歌地图API,但希望这有助于您了解这个想法。

我认为第一个选项更可取,但很难说,因为您没有提供大量的上下文。

最新更新