9

Pracuję z angular2-google-maps i najnowszą wersją Angular2. Próbuję przekonwertować niektóre funkcje lokalnego komponentu mapy na usługi w ich własnym pliku maps.service.ts. Na przykład:Angular2 Nie można znaleźć przestrzeni nazw "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!"); 
     } 
     } 
    }); 
} 
} 

w coś podobnego: 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); 
       } 
      } 
     )); 
    }); 
} 

Kwestia Dostaję że google jest zmienna nie jest rozpoznany, kiedy próbuję użyć Observer<google.maps.GeocoderResult[]>. Mam również declare var google: any; poza klasą usług.

Zmienna google działa w moim map.componenet.ts, ale nie zostaje rozpoznana w maps.service.ts.

+0

Gdzie importujesz "google"? –

+0

@ GünterZöchbauer Within AppModule: 'AgmCoreModule.forRoot ({ apiKey: '--key--', bibliotek: [ 'miejsca'] })' – Milo

+0

Musisz import maszynopis oraz który zapewnia 'google'. Wygląda na to, że skopiowałeś kod skądś. Czy możesz opublikować link? –

Odpowiedz

1

I w końcu zorientowali się problem, którego nie znałem było rzeczą. Mój komponent, do którego odwoływałem się z usługami, został nazwany map.component.ts, podczas gdy mój plik usług został nazwany maps.service.ts z s pod koniec map. Po zmianie pliku i oświadczeniach import wszystko działało poprawnie.

29

byłem stoi ten sam problem Próbowałem:

declare var google: any; 

Ale to nie dla mnie.
Znalazłem to answer i zadziałało dla mnie.
Najpierw upewnij się, że zainstalowano typowania na google maps
npm install @types/googlemaps --save --dev

--dev flaga jest przestarzała. Użyj npm install @types/googlemaps --save-dev

a następnie w kontrolerze

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

To działało dla mnie ... po prostu chcę dodać, że w Angular 2, dodałem 'import {} z '@ types/googlemaps';' do ten sam plik po 'import {NguiMapModule} z '@ ngui/map';' w moim shared.module.ts. – newman

1

To działa na mnie też:

Najpierw zainstaluj typings na mapach google w cmd na korzeniu projektu

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

A następnie dodaj w swoim pliku komponentu .ts poniżej:

import {} from '@types/googlemaps';