无法使用离子框架和ngMap将谷歌地图居中

时间:2015-01-09 06:13:26

标签: angularjs ionic-framework ionic ng-map

我使用的是Ionic Framework b14和最新的ngmap,

我有一个显示地图的视图,但是当我想设置中心时,它不会显示我从服务中获得的坐标。

(function() {

  var injectParams = ['$scope', '$stateParams', 'storeFactory'];
  var StoreController = function($scope, $stateParams, storeFactory) {
    var id = $stateParams.storeId;
    $scope.store;


    storeFactory.getStore(id)
      .success(function(store) {
        $scope.store = store;
      }).error(function(error) {
        $scope.status = ' ' + error.message;
      });


    $scope.$on('mapInitialized', function(event, map) {
      var myLatLng = new google.maps.LatLng(store.Latitude, store.Longitud);
      map.setCenter(myLatLng);

    });

  };

  StoreController.$inject = injectParams;

  angular.module('elizondo').controller('StoreController', StoreController);

}());

我认为必须要有服务器响应的时间,但我不知道如何解决它,你可以给我任何帮助。

感谢。

1 个答案:

答案 0 :(得分:4)

你是对的,mapInitialized监听器函数将在getStore成功回调之前执行。

您可以将侦听器函数中的地图保存在变量中,并将其用于回调:

var map;

$scope.$on('mapInitialized', function(event, m) {
  map = m;
});

storeFactory.getStore(id).success(function(store) {

  $scope.store = store;

  var myLatLng = new google.maps.LatLng(store.Latitude, store.Longitud);
  map.setCenter(myLatLng);
});

如果您的map指令范围与StoreController范围相同,例如:

<div ng-controller="StoreController">
  <map zoom="8"></map>
</div>

然后map对象已经在控制器中的$scope上可用,那么你可以跳过mapInitialized监听器功能(除非你将其用于其他东西)并且只是做:

storeFactory.getStore(id).success(function(store) {

  $scope.store = store;

  var myLatLng = new google.maps.LatLng(store.Latitude, store.Longitud);
  $scope.map.setCenter(myLatLng);
});