问题

在我的AngularJS控制器中,我通过$http服务从RESTful API(在此示例中为Google Maps API)请求一些位置数据。成功请求后,我想更新我的Google Map并设置地图的中心位置。在我的示例中,地图位置参数未从我的控制器收到任何更新。

我尝试了什么

我试图将$scope.options移到成功回调的内部和外部,但是两者都不适合我。地图未接收到位置数据。我猜我在成功回调处理程序中使用了错误的$scope。我不知道如何解决这个问题,也找不到任何类似的问题。

控制器:

angular.module('simple-map', ['AngularGM'])

.controller('SimpleMapCtrl', function($scope, $http) {

    $scope.location = {};

    $http.get('http://maps.googleapis.com/maps/api/geocode/json?address=San%20Francisco%20Bicycle%20Route%2060,%20San%20Francisco,%20Kalifornien,%20USA&sensor=false')
    .success(function(res) {
        $scope.location = res.results[0].geometry.location;
        console.log($scope.location.lat); // 37.7502819
        console.log($scope.location.lng); // -122.3874909

        $scope.options = {
          map: {
            center: new google.maps.LatLng(
                        $scope.location.lat,
                        $scope.location.lng
             ),
            zoom: 12,
            mapTypeId: google.maps.MapTypeId.TERRAIN
          }
        };

    });

});




http://jsfiddle.net/PwkLU/3/

最佳答案

看来您使用的gmMap指令不会监视正在加载中心和缩放的gm-map-options属性上的更改,该属性仅用于初始化(并且您初始化时数据还没有准备好)在get成功之前,不要设置它)。

但是,该指令不会监视中心并根据to the docs进行缩放:


  gm-center,gm-zoom,gm-bounds和
  gm-map-type-id变量...具有
  双向关联,即拖动或缩放地图,它们将
  更新,更新它们,地图将会改变。


因此,如果您像这样使用而不是使用gm-map-options来分配中心并将options属性缩放到gm-centergm-zoom,则它可以工作:

<gm-map gm-map-id="'simpleMap'" gm-center="options.map.center" gm-zoom="options.map.zoom" class="map" gm-map-options="options.map">


Updated fiddle

关于javascript - 成功执行$ http回调后设置 map 位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21034715/

10-11 15:28