LoginSignup
0
1

More than 5 years have passed since last update.

Angular2を使用してgoogle mapをどのように扱えば良いか調査したときのメモ。

Last updated at Posted at 2017-05-13

Angular2でgoogle mapを扱う。

Angular2を使用してgoogle mapをどのように扱えば良いか調査したときのメモ。

環境 OSX 10.11.6,Angular2,angular-google-maps

ググると、割とangular-google-mapsがメジャーそうなのでコレを利用することにした。
また、0から理解するのは大変なので、ここのソースを参考にさせてもらった。

パッケージ名が'angular2-google-maps'から'@agm/core'に代わると書いてあったので、今後のことを考え新パッケージ名に変更し動作を確認することにした。
しかし、単純にインストールするパッケージを変えただけでは、実行時にエラーなった。(旧パッケージ名では問題なく動く)

ブラウザのコンソールには、以下の大量のエラーメッセージが出力されていた。(Web画面はLoading...から変わらない)

Unhandled Promise rejection: Template parse errors:
Can't bind to 'latitude' since it isn't a known property of 'google-map'.
1. If 'google-map' is an Angular component and it has 'latitude' input, then verify that it is part of this module.
2. If 'google-map' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component. (" with the given lat/lng from-->
(略)

よく配布元CHANGELOGを読むと「BREAKING CHANGES(破壊的変更)」との記載があり、パッケージ名変更に合わせて以下のようなクラス名・タグセレクタ名の置き換えが必要だった。(一部抜粋)
ここにも記載があった。

Old class name / old selector New class name / new selector
SebmGoogleMap / sebm-google-map AgmMap / agm-map
SebmGoogleMapMarker / sebm-google-map-marker AgmMarker / agm-marker

今回、参考にしようとしたサンプルは、以下の修正を行うことで新パッケージ名で動いた。

$ git diff
diff --git a/package.json b/package.json
index fb7c1dc..b674cf6 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
     "@angular/platform-browser": "^2.3.1",
     "@angular/platform-browser-dynamic": "^2.3.1",
     "@angular/router": "^3.3.1",
-    "angular2-google-maps": "^0.17.0",
+    "@agm/core": "^1.0.0-beta.0",
     "core-js": "^2.4.1",
     "rxjs": "^5.0.1",
     "ts-helpers": "^1.1.1",
diff --git a/src/app/app.component.html b/src/app/app.component.html
index a169cda..a077ff8 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -3,7 +3,7 @@
 </form>
 <div class="address-panel">{{ address }}</div>
 <div class="trafficButton" (click)="setTrafficLayer()">Set Traffic Layer</div>
-<sebm-google-map [latitude]="lat" [longitude]="lng" [zoom]="zoom">
-  <sebm-google-map-marker [latitude]="lat" [longitude]="lng"></sebm-google-map-marker>
+<agm-map [latitude]="lat" [longitude]="lng" [zoom]="zoom">
+  <agm-marker [latitude]="lat" [longitude]="lng"></agm-marker>
   <map-content #map [trafficSwitch]="trafficSwitch"></map-content>
-</sebm-google-map>
\ No newline at end of file
+</agm-map>
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 541819d..35ef734 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -4,7 +4,7 @@ import { FormsModule } from '@angular/forms';
 import { HttpModule } from '@angular/http';
 import { AppComponent } from './app.component';

-import { AgmCoreModule } from 'angular2-google-maps/core';
+import { AgmCoreModule, AgmMap, AgmMarker } from '@agm/core';

 import { MapService } from '../services/map.service';
 import { MapContentComponent } from '../components/map/map-content.component';
diff --git a/src/components/map/map-content.component.ts b/src/components/map/map-content.component.ts
index 16e8038..bdbd47e 100644
--- a/src/components/map/map-content.component.ts
+++ b/src/components/map/map-content.component.ts
@@ -1,6 +1,6 @@
 import { Component, Input } from '@angular/core';

-import { GoogleMapsAPIWrapper } from 'angular2-google-maps/core';
+import { GoogleMapsAPIWrapper } from '@agm/core';

 declare var google: any;

diff --git a/src/services/map.service.ts b/src/services/map.service.ts
index 3172b03..3bf00ef 100644
--- a/src/services/map.service.ts
+++ b/src/services/map.service.ts
@@ -1,6 +1,6 @@
 import { Injectable } from '@angular/core';

-import { MapsAPILoader } from 'angular2-google-maps/core';
+import { MapsAPILoader } from '@agm/core';

 declare let google: any;

後は、使い方をマスタするだけなのだが。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1