9

Tôi đang làm việc với angular2-google-maps và phiên bản mới nhất của Angular2. Tôi đang cố gắng chuyển đổi một số hàm thành phần bản đồ cục bộ thành các dịch vụ trong tệp riêng của chúng maps.service.ts. Ví dụ:Angular2 Không thể tìm thấy không gian tên '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!"); 
     } 
     } 
    }); 
} 
} 

Into cái gì đó như: 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); 
       } 
      } 
     )); 
    }); 
} 

Vấn đề tôi nhận được là google biến không được ghi nhận khi tôi cố gắng sử dụng Observer<google.maps.GeocoderResult[]>. Tôi có declare var google: any; bên ngoài lớp dịch vụ.

Biến số google hoạt động trong số map.componenet.ts của tôi nhưng không được nhận dạng trong số maps.service.ts.

+0

Bạn nhập 'google' ở đâu? –

+0

@ GünterZöchbauer Trong AppModule: 'AgmCoreModule.forRoot ({ apiKey: '--key--', thư viện: ['places'] })' – Milo

+0

Bạn cần nhập khẩu TypeScript cũng cung cấp 'google'. Có vẻ như bạn đã sao chép mã từ một nơi nào đó. Bạn có thể xin vui lòng gửi một liên kết? –

Trả lời

1

cuối cùng tôi đã tìm ra được vấn đề, mà tôi không biết là một điều. Thành phần của tôi mà tôi đã tham chiếu các dịch vụ có tên là map.component.ts trong khi tệp dịch vụ của tôi có tên là maps.service.ts với số s ở cuối map. Sau khi tôi thay đổi tệp và import, mọi thứ đều hoạt động tốt.

29

tôi đã phải đối mặt với cùng một vấn đề tôi đã cố gắng:

declare var google: any; 

Nhưng nó không làm việc cho tôi.
Tôi tìm thấy điều này answer và nó đã làm việc cho tôi.
Trước tiên, hãy đảm bảo rằng bạn đã cài đặt các kiểu đánh máy cho bản đồ google
npm install @types/googlemaps --save --dev

--dev flag không được dùng nữa. Sử dụng npm install @types/googlemaps --save-dev

Và Sau đó, trong điều khiển của bạn

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

Điều này làm việc cho tôi ... chỉ muốn thêm vào trong Angular 2, tôi đã thêm 'import {} từ '@ types/googlemaps';' vào cùng một tệp sau khi 'nhập {NguiMapModule} từ '@ ngui/map';' trong tệp shared.module.ts của tôi. – newman

1

Nó đang làm việc cho tôi thêm:

Đầu tiên cài đặt typings cho các bản đồ google trong cmd vào thư mục gốc của dự án

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

Và sau đó thêm vào tệp thành phần .ts của bạn bên dưới:

import {} from '@types/googlemaps'; 
Các vấn đề liên quan