问题
在我的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-center
和gm-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/