J'ai une application Ionic 4 qui utilise @ ionic-native / google-maps . J'obtiens l'erreur suivante:
[Browser][cordova.js][xhrStatusChangeHandler] Could not XHR config.xml: Not Found
Voici info.page.html:
GET http://192.168.43.43:8100/config.xml 404 (Not Found)
info.page.ts: p >
import { Component, OnInit } from '@angular/core';
import { LocationService } from '../location.service';
import { NavController, Platform } from '@ionic/angular';
import {
GoogleMaps,
GoogleMap,
GoogleMapsEvent,
GoogleMapOptions,
CameraPosition,
MarkerOptions,
Marker,
Environment
} from '@ionic-native/google-maps';
@Component({
selector: 'app-tiedot',
templateUrl: './info.page.html',
styleUrls: ['./info.page.scss'],
})
export class InfoPage implements OnInit {
info: any;
map: GoogleMap;
constructor(public service: LocationService,
public navCtrl: NavController,
private platform: Platform) {
}
async ngOnInit() {
this.map = this.service.getInfo();
await this.platform.ready();
await this.loadMap();
}
goBack() {
this.navCtrl.back();
}
loadMap() {
Environment.setEnv({
'API_KEY_FOR_BROWSER_RELEASE': 'AIzaSyDhNkv1hIlt92x02Glsg9u_7u9GSwcOV5U',
'API_KEY_FOR_BROWSER_DEBUG': 'AIzaSyDhNkv1hIlt92x02Glsg9u_7u9GSwcOV5U'
})
let mapOptions: GoogleMapOptions = {
camera: {
target: {
lat: 43.0741904,
lng: -89.3809802
},
zoom: 18,
tilt: 30
}
}
this.map = GoogleMaps.create('map_canvas', mapOptions);
let marker: Marker = this.map.addMarkerSync({
title: 'Ionic',
icon: 'blue',
animation: 'drop',
position: {
lat: 43.0741904,
lng: -89.3809802
}
});
marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe(() => {
alert('klikattu');
})
}
}
}
Vous pouvez également fournir une explication sur la signification de ces messages d'erreur:
<ion-header>
<ion-toolbar>
<ion-title>Details</ion-title>
<ion-buttons slot="start">
<ion-button (click)="goBack()">
<ion-icon slot="start" name="arrow-back"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-card *ngIf="info != undefined">
<ion-card-header>
<ion-card-subtitle>{{ info.nimi }}</ion-card-subtitle>
<ion-card-title>{{ info.osoite }}</ion-card-title>
</ion-card-header>
<ion-card-content>
{{ info.postinumero }} {{ info.kunta }}
<br>
{{ info.aukioloajat }}
</ion-card-content>
</ion-card>
<div id="map_canvas"></div>
</ion-content>
et
ERROR Error: Uncaught (in promise): Error: Can not find the element [#map_canvas] Error: Can not find the element [#map_canvas]
4 Réponses :
J'avais le même problème. Je viens d'ajouter le style à cette div et cela a fonctionné comme un charme.
<div style="height: 100%; width: 100%" id="map_canvas"></div>
Tout le code est le même. La méthode ci-dessus est testée.
Merci! Bon codage !!
Cela peut arriver si le div a une (ou plusieurs) dimension avec 0 pixels. Cela m'est arrivé aussi dans le modèle d'onglets de Ionic. L'ajout de style résout le problème. Assurez-vous également que vous utilisez une version bêta récente du plug-in natif ionique de google maps.
Voir: https: //forum.ionicframework .com / t / ionic-4-google-maps-plugin / 139786/2
Veuillez vérifier que la carte div et l'élément parent ont une certaine hauteur. CSS traite toujours les valeurs de pourcentage comme un pourcentage de l'élément parent.
Ce problème est souvent causé par l'allocation d'une hauteur de 0px. Pensez-y de cette façon, la carte div était vide sur init, elle (et l'élément parent) aurait une hauteur de 0px. Lorsque nous remplirons la carte plus tard, nous ne verrons rien car la hauteur 100% du parent 0px est 0px. Vous verrez l'erreur: Impossible de trouver l'élément [#map_canvas].
par exemple,
<div style="height: 200px;" id="map_canvas"></div>
Assurez-vous que la carte div et l'élément parent (ie carte ionique dans l'exemple ci-dessus) ont une certaine hauteur sur init. Vous pouvez définir une hauteur fixe pour les tests et cela prouvera mon point de vue.
<ion-content>
<ion-card style="height: 50%"> // 50% of the entire conent
<div style="height: 100%;width: 100%" id="map_canvas"></div> // 100% of ion-card
</ion-card>
</ion-content>
Bonne chance.
Ionic 4
Si vous souhaitez accéder à Google Map dans le composant modal, utilisez ce morceau de code
GoogleMaps.create(document.getElementById('map_canvas'), mapOptions);
Essayez d'appeler
loadMap ()dansngAfterViewInitau lieu dengOnInit.GoogleMaps.createdevrait être capable de prendre directement un élément HTML comme premier paramètre: puisque votre vue est encapsulée, vous devriez peut-être essayer d'obtenir l'élément, puis le nourrir à la fonction, au lieu de le laisser obtenir l'élément via son identifiant. Mais essayez d'abord la solution de @ ConnorsFan!la suggestion n'a pas fonctionné, le problème existe toujours. @trichetriche pouvez-vous me fournir le code sur la façon de procéder? Viewchild?
J'ai ajouté un Viewchild comme celui-ci
@ViewChild ('map_canvas') map_canvas: ElementRef;, mais cela ne fonctionne pas@aleksejjj vous devez utiliser
GoogleMaps.create (this.map_canvas.nativeElement, mapOptions);si vous essayez ma solution!Merci beaucoup, mais j'ai esquivé le problème en passant à
Angular Google Maps.salut @aleksejjj, est-ce résolu? Je suis confronté au même problème.
@rchau Je n'ai pas pu résoudre le problème moi-même, mais vous devriez essayer les astuces des réponses que les gens ont données ici. Au lieu de Ionic Native Maps, j'ai dû utiliser Angular Google Maps à la place.