web-dev-qa-db-fra.com

Comment puis-je intégrer les API Google Maps dans un composant Angular 2

J'ai un composant Angular 2 qui est défini dans le fichier comp.ts de la manière suivante:

import {Component} from 'angular2/core';

@component({
    selector:'my-comp',
    templateUrl:'comp.html'
})

export class MyComp{
    constructor(){
    }
}

Parce que je veux que le composant montre une carte Google, j'ai inséré dans le fichier comp.html le code suivant:

<!DOCTYPE html>
<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
  var mapProp = {
    center:new google.maps.LatLng(51.508742,-0.120850),
    zoom:5,
    mapTypeId:google.maps.MapTypeId.ROADMAP
  };
  var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>

<body>
<div id="googleMap" style="width:500px;height:380px;"></div>
</body>

</html> 

Ce code a été copié à partir de ce lien http://www.w3schools.com/googleAPI/google_maps_basic.asp . Le problème est que le composant ne montre pas la carte. Qu'est ce que j'ai mal fait?

20
nix86

J'ai trouvé une solution. Tout d'abord, la ligne suivante:

<script src="http://maps.googleapis.com/maps/api/js?key=[YOUR_API_KEY]"></script>

doit être inséré dans le fichier index.html. Le code qui crée la carte doit être inséré dans le fichier comp.ts. En particulier, il doit être inséré dans une méthode spéciale, à savoir "ngOnInit", qui peut être positionnée après le constructeur de la classe. C'est comp.ts:

import { Component } from 'angular2/core';

declare const google: any;

@Component({
    selector: 'my-app',
    templateUrl:'appHtml/app.html',
    styleUrls: ['css/app.css']
})

export class AppMainComponent {
    constructor() {}
    ngOnInit() {
        let mapProp = {
            center: new google.maps.LatLng(51.508742, -0.120850),
            zoom: 5,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        let map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
    }
}

Enfin, le div avec l'id "googleMap", qui contiendra la carte Google, doit être inséré dans le fichier comp.html, qui ressemblera à ceci:

<body>
    <div id="googleMap" style="width:500px;height:380px;"></div>
</body>
16
nix86

Oui, tu pourrais le faire. Mais il y aurait une erreur dans le compilateur TypeScript, alors n'oubliez pas de déclarer implicitement la variable google.

declare var google: any;

ajoutez cette directive juste après l'importation du composant.

import { Component, OnInit } from '@angular/core';
declare var google: any;

@Component({
  moduleId: module.id,
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css']
})
export class AppComponent implements OnInit {
  ngOnInit() {
    var mapProp = {
            center: new google.maps.LatLng(51.508742, -0.120850),
            zoom: 5,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
      var map = new google.maps.Map(document.getElementById("gmap"), mapProp);
  }
}
22
Ruslan Abramov