10

我已经挣扎了几个小时,试图在我的Angular PlaceResult 2 项目中使用Angular-cli.

我必须googlemaps使用@types 安装并将其添加"types"到我的tsconfig.json配置文件的属性下。

{
    ...
    "types": [
      "google-maps"
    ]
  }
}

google.maps.places.PlaceResult我只需导入它就可以成功地在我的 Angular 2 组件中使用它!

import { ActivatedRoute, Params } from "@angular/router";
import { MapsAPILoader } from "angular2-google-maps/core";

import PlaceResult = google.maps.places.PlaceResult;
import GeocoderRequest = google.maps.GeocoderRequest;
...

几个小时后,我不得不使用,它与和google.maps.Marker位于同一个定义文件中。所以我只是将它导入如下:PlaceResultGeocoderRequest

[Line 12] import PlaceResult = google.maps.places.PlaceResult;
[Line 13] import GeocoderRequest = google.maps.GeocoderRequest;
[Line 14] import Marker = google.maps.Marker;
[Line 15] import LatLng = google.maps.LatLng;
...

但是我在运行时遇到了一个意外错误说

Uncaught ReferenceError: google is not defined    search.component.ts:14
at Object.444 (search.component.ts:14)
at __webpack_require__ (bootstrap 26c2b97…:52)
at Object.727 (app.config.ts:11)
at __webpack_require__ (bootstrap 26c2b97…:52)
at Object.602 (src async:7)
at __webpack_require__ (bootstrap 26c2b97…:52)
at Object.1258 (.*$:7)
at __webpack_require__ (bootstrap 26c2b97…:52)
at webpackJsonpCallback (bootstrap 26c2b97…:23)
at main.bundle.js:1    

请注意,webpack 在我的组件的第 14 行抛出了这个错误。这意味着(如果我错了,请纠正我)前面的行(使用相同的“google”)运行良好。

我错过了什么吗?


我用 :

  • 角度:2.4
  • Angular-CLI:1.0.0-beta.24
  • 打字稿:2.0.10
  • angular2-谷歌地图:0.17.0
4

1 回答 1

12

更新

关于导入LatLngBounds = google.maps.LatLngBounds;,我发现我在new LatLngBounds()Maps api 的 init 之前调用了 custructor ( )。事实上,我正在使用@agm/core;. 并且必须如下调用构造load()函数

ngOnInit() {
    this.mapsAPILoader.load().then(() => {

                    this.page$.subscribe(page => {
                        if (page && page.content) {
                            this.latLngBounds = new google.maps.LatLngBounds();

                            page.content.forEach(w => this.latLngBounds.extend(new google.maps.LatLng(lat, lng)));
                        }
                    });

                }
            );
}

我在我的 typings.d.ts 中添加了以下导入

import {} from '@types/googlemaps';

原始答案

我通过以下配置解决了我的问题:

1- package.json

"dependencies": {
    ...
    "googlemaps": "^1.12.0",
    ...
  }

2- tsconfig.json

"types": [
      ...
      "googlemaps"
    ]

3-并在我的index.html中添加 google api 脚本

<head>
    ...
</head>
<body>
   <app-root>Loading...</app-root>

   <script src="https://maps.googleapis.com/maps/api/js?key=KEY&libraries=places&language=fr" async defer></script>
</body>
</html> 

4-在组件中,像下面这样使用它

declare var google: any;

@Component({
    ...
})
export class SearchComponent implements OnInit, AfterViewInit {

    // Google Maps
    bounds: google.maps.LatLngBounds;
    markers: google.maps.Marker[];
    infoWindow: google.maps.InfoWindow;

}
于 2017-06-01T07:46:25.920 回答