Ответ 1
Добавьте ширину и высоту на карту DIV:
<div id="map" style="width:800px;height:600px"></div>
Также эта строка
<script src="https://maps.googleapis.com/maps/api/js?key=APIKEY"></script>
необходимо указать функцию обратного вызова
Я использую ionic2 для отображения карт Google. Но я получаю пустую страницу, когда я запускаю следующий ниже код.
export class NearByStoresPage {
constructor(private nav: NavController, private confData: ConferenceData) {
this.loadNearByOffers();
}
loadNearByOffers(){
let options = {timeout: 10000, enableHighAccuracy: true};
navigator.geolocation.getCurrentPosition(
(position) => {
let latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
let mapOptions = {
center: latLng,
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
let map = new google.maps.Map(document.getElementById("map"), mapOptions);
let marker = new google.maps.Marker({
map: map,
animation: google.maps.Animation.DROP,
position: map.getCenter()
});
let content = "<h4>Information!</h4>";
let infoWindow = new google.maps.InfoWindow({
content: content
});
google.maps.event.addListener(marker, 'click', function(){
infoWindow.open(map, marker);
});
},
(error) => {
console.log(error);
}, options
);
}
}
И я включаю файл в файл index.html,
<script src="https://maps.googleapis.com/maps/api/js?key=APIKEY"></script>
Html файл,
<ion-navbar *navbar>
<button menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<ion-title>Near By Offers</ion-title>
</ion-navbar>
<ion-content class="map-page">
<div id="map"></div>
</ion-content>
Но следующий код работает нормально,
this.confData.getMap().then(mapData => {
let mapEle = document.getElementById('map');
let map = new google.maps.Map(mapEle, {
center: mapData.find(d => d.center),
zoom: 16
});
mapData.forEach(markerData => {
let infoWindow = new google.maps.InfoWindow({
content: `<h5>${markerData.name}</h5>`
});
let marker = new google.maps.Marker({
position: markerData,
map: map,
title: markerData.name
});
marker.addListener('click', () => {
infoWindow.open(map, marker);
});
});
google.maps.event.addListenerOnce(map, 'idle', () => {
mapEle.classList.add('show-map');
});
});
Добавьте ширину и высоту на карту DIV:
<div id="map" style="width:800px;height:600px"></div>
Также эта строка
<script src="https://maps.googleapis.com/maps/api/js?key=APIKEY"></script>
необходимо указать функцию обратного вызова
Я думаю, проблема связана с тем, что вы вызываете метод this.loadNearByOffers();
в конструкторе. Этот метод пытается затем загрузить карту, получив элемент из DOM
document.getElementById("map")
Но когда ваш конструктор выполнен, этот элемент в DOM еще не существует, и почему карта не загружена должным образом.
Я не знаю, какую версию Ionic вы используете в проекте, но вы можете использовать один из событий страницы, например ionViewDidEnter
чтобы убедиться, что код будет выполнен (и карта будет инициализирована) после того, как будут доступны элементы DOM.
ionViewDidEnter(){
// the html of the page is now available
this.loadNearByOffers();
}
Здесь вы можете найти рабочий плунжер .
Попробуйте вызвать метод loadNearByOffers() следующим образом.
ionViewLoaded(){
this.platform.ready().then(() => {
this.loadNearByOffers();
}
}
карта должна быть загружена на событие готовности устройства.