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; вне класса обслуживания.

Переменная работает в моем map.componenet.ts, но не распознается в maps.service.ts.

+0

Где вы импортируете 'google'? –

+0

@ GünterZöchbauer Within AppModule: 'AgmCoreModule.forRoot ({ apiKey: '--key--', библиотека: [ 'место'] })' – Milo

+0

Вам нужен импорт машинописи, а что обеспечивает 'google'. Кажется, вы скопировали код откуда-то. Не могли бы вы разместить ссылку? –

ответ

1

я наконец понял, проблема, которую я не знаю, было дело. Мой компонент, на который я ссылался на сервисы, был указан map.component.ts, а мой файл служб был указан maps.service.ts с s в конце map. После того, как я сменил файл и import, все было хорошо.

29

Я столкнулся с той же проблемой я попробовал:

declare var google: any; 

Но это не работает для меня.
Я нашел это answer, и это сработало для меня.
Сначала убедитесь, что вы установили типизации для Google Maps
npm install @types/googlemaps --save --dev

--dev флаг является устаревшим. Используйте npm install @types/googlemaps --save-dev

, а затем в контроллере

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

Это сработало для меня ... просто хочу добавить, что в Angular 2 я добавил 'import {} из '@ types/googlemaps';' в тот же файл после 'import {NguiMapModule} из '@ ngui/map';' в моем shared.module.ts. – newman

1

Это работает для меня также:

Сначала установите typings для карт Google в ЦМД на корень проекта

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

А затем добавьте в свой файл .ts ниже:

import {} from '@types/googlemaps'; 
Смежные вопросы