ionic не отображает карты Google при первой загрузке

У меня есть приложение, которое представляет собой экран приветствия/входа, и после того, как вы его подпишете, вы попадете на экран вкладок с четырьмя вкладками, на первой вкладке которого отображается карта Google.

При первом входе в систему страница не отображает себя, но при обновлении страницы карта отображается изящно, как и ожидалось в первый раз. Это происходит КАЖДЫЙ раз, но я получаю только одну ошибку javascript.

ошибка

Uncaught Error: can't load XRegExp twice in the same frame(anonymous function) @ xregexp-min.js:2

код

function initialize() {
  var mapOptions = {
    zoom: 16,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(
    document.getElementById("map"),
    mapOptions
  );
  var geocoder = new google.maps.Geocoder();

  $scope.map = map;
  $scope.centerOnMe();
}
google.maps.event.addDomListener(window, 'load', initialize);

$scope.centerOnMe = function() {
  if(!$scope.map) {
    return;
  }

  $scope.loading = $ionicLoading.show({
    content: 'Getting current location...',
    showBackdrop: false
  });

  // get user location
  $cordovaGeolocation
  .getCurrentPosition({
    timeout:10000,
    enableHighAccuracy:true
  })
  .then(function(position) {
    $ionicLoading.hide();
    // we found the position
    $scope.map.setCenter(
      new google.maps.LatLng(
        position.coords.latitude, 
        position.coords.longitude
      )
    );
  }, function(e) {
    $ionicLoading.hide();
    console.log(e);
    alert("Uh oh, we can't find your position! Is your GPS enabled?\n\n" + e);
  });
};

редактировать

Это моя последняя ошибка javascript после замены google init на ionic init. Я понимаю, что происходит, но я не знаю, куда я должен переместить это объявление функции. Я переместил его внутрь инициализации, но он все еще не работал. Должен ли я установить тайм-аут?

TypeError: $scope.loadLocations is not a function
    at initialize (controllers.js:179)
    at Object.ionic.Platform.ready (ionic.bundle.js:2120)
    at new <anonymous> (controllers.js:182)
    at invoke (ionic.bundle.js:12468)
    at Object.instantiate (ionic.bundle.js:12476)
    at ionic.bundle.js:16745
    at IonicModule.controller.self.appendViewElement (ionic.bundle.js:47716)
    at Object.IonicModule.factory.ionicViewSwitcher.create.switcher.render (ionic.bundle.js:45973)
    at Object.IonicModule.factory.ionicViewSwitcher.create.switcher.init (ionic.bundle.js:45893)
    at IonicModule.controller.self.render (ionic.bundle.js:47590)

person Jacksonkr    schedule 16.04.2015    source источник


Ответы (1)


Вам не нужно $scope.centerOnMe(); в инициализации. Если вы это сделаете, компиляция будет непоследовательной; обратитесь к примерам, и вы поймете.

Кроме того, в некоторых случаях ionic плохо работает с DOM.

Загрузить карту с $scope.init внутри контейнера вместо function initialize().

Этот ответ объясняет это подробно.

Другой способ сделать это — заменить google.maps.event.addDomListener(window, 'load', initialize); на ionic.Platform.ready(initialize);. Пример здесь.

person Kay_N    schedule 17.04.2015
comment
$scope.init не сработало, а ionic.Platform.ready сработало. Теперь я обнаружил, что мои пользовательские функции не объявляются к моменту запуска инициализации (при первом запуске). Любые предложения по этому поводу? Я помещу ошибку js в редактирование. - person Jacksonkr; 19.04.2015