9

我正在使用angular2-google-maps和最新版本的Angular2。我正試圖將其中一些本地地圖組件功能轉換爲它們自己的文件maps.service.ts中的服務。例如:Angular2找不到名稱空間'google'

map.component.ts

getGeoLocation(lat: number, lng: number) { 
if (navigator.geolocation) { 
    let geocoder = new google.maps.Geocoder(); 
    let latlng = new google.maps.LatLng(lat, lng); 
    let request = { latLng: latlng }; 
    geocoder.geocode(request, (results, status) => { 
     if (status == google.maps.GeocoderStatus.OK) { 
     let result = results[0]; 
     if (result != null) { 
      this.fillInputs(result.formatted_address); 
     } else { 
      alert("No address available!"); 
     } 
     } 
    }); 
} 
} 

成類似:maps.service.ts

getGeoLocation(lat: number, lng: number): Observable<google.maps.GeocoderResult[]> { 
    let geocoder = new google.maps.Geocoder(); 
    let latlng = new google.maps.LatLng(lat, lng); 
    let request = { latLng: latlng }; 
    return new Observable((observer: Observer<google.maps.GeocoderResult[]>) => { 
     geocoder.geocode({ request }, (
      (results: google.maps.GeocoderResult[], status: google.maps.GeocoderStatus) => { 
       if (status == google.maps.GeocoderStatus.OK) { 
        observer.next(results); 
        observer.complete(); 
       } else { 
        console.log('Geocoding service failed due to: ' +status); 
        observer.error(status); 
       } 
      } 
     )); 
    }); 
} 

我得到的問題是,google變量是不被認可的時候我嘗試使用Observer<google.maps.GeocoderResult[]>。我也有declare var google: any;以外的服務類。

google變量在我的map.componenet.ts中有效,但在maps.service.ts中未被識別。

+0

你在哪裏輸入'google'? –

+0

@GünterZöchbauer內的AppModule:'AgmCoreModule.forRoot({ apiKey: '--key--', 庫:[ '地方'] })' – Milo

+0

你需要一個打字稿進口所提供'google'。似乎你從某處複製了代碼。你能發表一個鏈接嗎? –

回答

1

我終於想通了這個問題,這是我不知道的是一件事後添加

declare var google: any; 

。我引用服務的組件名爲map.component.ts,而我的服務文件名爲maps.service.tssmap的末尾。在我更改文件和import聲明後,一切正常。

29

我面臨同樣的問題 我想:

declare var google: any; 

但它沒有爲我工作。
我發現這個answer,它爲我工作。
首先確保你安裝了分型谷歌地圖
npm install @types/googlemaps --save --dev

--dev標誌已被棄用。使用npm install @types/googlemaps --save-dev

,然後在你的控制器

import {} from '@types/googlemaps'; 
+1

這個工作對我什麼......只是想補充一點,在角2,我接着說:從「@類型/谷歌地圖」進口{};'到'@ ngui/map'中的import {NguiMapModule}之後的相同文件;'在我的shared.module.ts中。 – newman

1

這是爲我工作也:

首先對項目的根安裝typings爲谷歌地圖在cmd中

npm install @types/googlemaps --save --dev 

然後在下面的.ts組件文件中添加:

import {} from '@types/googlemaps'; 
相關問題