0

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);

}());

サーバーが応答するのに時間がかかる必要があると思いますが、それを修正する方法がわかりません。助けてください。

ありがとう。

4

1 に答える 1

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);
});
于 2015-01-09T15:12:19.493 に答える