2016-06-14 40 views
4

我正在尝试将googlemaps实施到我的angular-cli项目。我知道有一个'angular2-google-maps'组件(github),但我需要路由和更多自定义功能。将googlemaps添加到angular-cli

我发现执行地图到一个项目有两种方式:

1:stackoverflow:与谷歌API载入 - 但我无法弄清楚如何初始化谷歌,地图...

2:使用DefinitelyTyped google.maps.d.ts。 我将它与--global(因为环境ist弃用..)安装到我的项目,并将index.d.ts(全球)添加到src/typings.d.ts,并可以使用“google.map ..”在.TS文件:

myLatLng = {lat: -25.363, lng: 131.044}; 
    map:any; 

    constructor() { 
    this.map = new google.maps.Map(document.getElementById('map'), { 
     center: this.myLatLng, 
     zoom: 4 
    }); 
    } 

但如果我有角CLI它的错误构建它: “的ReferenceError:谷歌没有定义”

什么想法?

回答

6

在这里,一步一步的指南,添加一个谷歌地图组件到angular-cli项目。

第一步:从DefinitelyTyped安装google.maps:

typings i dt~google.maps --global --save 

第二步:如果你已经安装了旧的分型添加

/// <reference path="../typings/index.d.ts" /> 

到你的src/typings.d.ts

第3步:生成新组件

ng g component google-maps 

下面的代码添加到:

.TS:

height = '100px'; 
    myLatLng = {lat: -25.363, lng: 131.044}; 
    map:any; 

    constructor(private googleApi:GoogleApiService) {} 

    ngOnInit() { 
    this.googleApi.initMap().then(() => { 

     let latlng = new google.maps.LatLng(this.myLatLng.lat, this.myLatLng.lng); 

     this.map = new google.maps.Map(document.getElementById('map'), { 
     center: latlng, 
     zoom: 4 
     }); 

     new google.maps.Marker({ 
     position: latlng, 
     map: this.map, 
     title: 'Hello World!' 
     }); 
    }); 
    } 

的.html:

<div id="map" [style.height]="height"></div> 

第四步:生成新的服务

ng g service google-maps/shared/google-api 

添加GoogleApiService + HTTP_PROVIDERS为src /main.ts

代码:

const API_KEY = '[insert your code]'; 
const url = 'https://maps.googleapis.com/maps/api/js?key='+ API_KEY +'&callback=initMap'; 

@Injectable() 
export class GoogleApiService { 
    private loadMap: Promise<any>; 

    constructor(private http:Http) { 
    this.loadMap = new Promise((resolve) => { 
     window['initMap'] =() => { 
     resolve(); 
     }; 
     this.loadScript() 
    }); 
    } 

    public initMap():Promise<any> { 
    return this.loadMap; 
    } 

    private loadScript() { 
    let script = document.createElement('script'); 
    script.src = url; 
    script.type = 'text/javascript'; 

    if (document.body.contains(script)) { 
     return; 
    } 
    document.getElementsByTagName('head')[0].appendChild(script); 
    } 
} 

也许你需要删除从spec.ts文件的一些线路。 但是,您可以将GoogleMapsComponent添加为指令。

  • 它是超级容易与路线等 扩大也许,如果我有时间我上传我GoogleMapsComponent的当前版本的github ..