Как использовать Google Maps с Ionic 3

2

Uncaught (в обещании):

TypeError: Невозможно прочитать свойство 'firstChild' со значением null TypeError: Невозможно прочитать свойство 'firstChild' со значением null в Object._. Og (maps.googleapis.com/maps/api/js?key=&callback=initMap:88:391) в новый tg (maps.googleapis.com/maps/api/js?key=&callback=initMap:90:76) в ParkMapPage.initializeMap

Ошибка выше, когда я пробую ионную подачу --lab

import { Component } from '@angular/core';
import { Platform, NavController } from 'ionic-angular';


@Component({
  selector: 'page-park-map',
  templateUrl: 'park-map.html'
})

export class ParkMapPage {
  map: google.maps.Map;

  constructor(public navCtrl: NavController, public platform: Platform) {
    this.map = null;
    this.platform.ready().then(() => {
      this.initializeMap();
    });
  }

  initializeMap() {
    let minZoomLevel = 3;

    this.map = new google.maps.Map(document.getElementById("map_canvas"), {
      zoom: minZoomLevel,
      center: {lat: 39.833, lng: -98.583},
      mapTypeControl: false,
      streetViewControl: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  }

}

Выше мой код в файле Typescript.

<ion-content> <div id="map_canvas"></div> </ion-content>

Выше мой код в файле HTML.

Это упражнение из книги. Я не могу решить это, может кто-нибудь, пожалуйста, помогите мне):

Теги:
angular
ionic-framework
google-maps

2 ответа

2
Лучший ответ

Я настоятельно рекомендую вам использовать оболочку Ionic Native для карт Google вместо того, чтобы идти соло.

1. Установите плагины Cordova и Ionic Native:

$ ionic cordova plugin add cordova-plugin-googlemaps --variable API_KEY_FOR_ANDROID="YOUR_ANDROID_API_KEY_IS_HERE" --variable API_KEY_FOR_IOS="YOUR_IOS_API_KEY_IS_HERE"
$ npm install --save @ionic-native/google-maps

2. После установки пакета плагинов добавьте его в свои приложения NgModule.

...

import { Camera } from '@ionic-native/camera';

...

@NgModule({
  ...

  providers: [
    ...
    GoogleMaps
    ...
  ]
  ...
})
export class AppModule { }

3. Использование

import {
 GoogleMaps,
 GoogleMap,
 GoogleMapsEvent,
 LatLng,
 CameraPosition,
 MarkerOptions,
 Marker
} from '@ionic-native/google-maps';

export class MapPage {
 constructor(private googleMaps: GoogleMaps) {}

// Load map only after view is initialized
ngAfterViewInit() {
 this.loadMap();
}

loadMap() {
 // make sure to create following structure in your view.html file
 // and add a height (for example 100%) to it, else the map won't be visible
 // <ion-content>
 //  <div #map id="map" style="height:100%;"></div>
 // </ion-content>

 // create a new map by passing HTMLElement
 let element: HTMLElement = document.getElementById('map');

 let map: GoogleMap = this.googleMaps.create(element);

 // listen to MAP_READY event
 // You must wait for this event to fire before adding something to the map or modifying it in anyway
 map.one(GoogleMapsEvent.MAP_READY).then(
   () => {
     console.log('Map is ready!');
     // Now you can add elements to the map like the marker
   }
 );

 // create LatLng object
 let ionic: LatLng = new LatLng(43.0741904,-89.3809802);

 // create CameraPosition
 let position: CameraPosition = {
   target: ionic,
   zoom: 18,
   tilt: 30
 };

 // move the map camera to position
 map.moveCamera(position);

 // create new marker
 let markerOptions: MarkerOptions = {
   position: ionic,
   title: 'Ionic'
 };

 const marker: Marker = map.addMarker(markerOptions)
   .then((marker: Marker) => {
      marker.showInfoWindow();
    });
 }

}
  • 0
    Вау, спасибо! Но мне все еще очень любопытно, что пошло не так с моим кодом выше, потому что я хочу выполнить остальные упражнения, которые я делаю в этой книге -> Разработка мобильных приложений с Ionic 2 Криса Гриффита.
  • 0
    Не совсем уверен, что не так, код, которым вы поделились, на первый взгляд выглядит нормально. В любом случае вы можете решить задачу, выполнив ее надлежащим, современным и актуальным для отрасли способом: используя Ionic Native . Вы делаете отличное обучение самостоятельно, так держать!
Показать ещё 1 комментарий
2

Предыдущий, конечно, отличный ответ от манана. В качестве альтернативы, чтобы исправить эту проблему в прямом javascript-способе, как показывает Крис Гриффит в своей книге, см. Ссылку на книгу

Это довольно просто - вам нужно переместить вызов this.initializeMap(); к функции ionViewDidLoad():

ionViewDidLoad() {
    this.initializeMap();
}

Это входит в класс ParkMapPage. И уберите вызов initializeMap внутри конструктора.

Эти изменения происходят из-за изменений, исходящих от Ionic 3 вместо Ionic 2.

  • 1
    Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
  • 0
    Я добавил информацию здесь. Итак, как мне избавиться от «-1» в моем ответе? Это не очень хороший способ приветствовать кого-то на SO.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню