【问题标题】:Angular2 - google map -drawingManager undefinedAngular2 - 谷歌地图 -drawingManager 未定义
【发布时间】:2017-03-01 19:05:08
【问题描述】:

您好,我正在尝试在谷歌地图中启用绘图工具。但出现如下错误:

VM1935 zone.js@0.6.25?main=browser:140 Uncaught TypeError: Cannot read property 'DrawingManager' of undefined

import { Component } from '@angular/core';
import { Validators, FormGroup, FormArray, FormBuilder } from '@angular/forms';
import { Ng2MapComponent } from 'ng2-map';

Ng2MapComponent['apiUrl'] =
  'https://maps.google.com/maps/api/js?libraries=visualization,places';

@Component({
  selector: 'my-app',
  template: `
    <ng2-map zoom="14" center="Brampton, Canada">
      <marker *ngFor="let pos of positions" 
        (click)="showInfoWindow($event)"
        [position]="pos"></marker>
      <info-window id="iw">
        lat: [[lat]], lng: [[lng]]
      </info-window>
      <drawing-manager
      [drawingMode]="'marker'"
      [drawingControl]="true"
      [drawingControlOptions]="{
        position: 2,
        drawingModes: ['marker', 'circle', 'polygon', 'polyline', 'rectangle']
       }"
      [circleOptions]="{
        fillColor: '#ffff00',
        fillOpacity: 1,
        strokeWeight: 5,
        editable: true,
        zIndex: 1
      }"></drawing-manager>
    </ng2-map>
    <button (click)="showRandomMarkers()">Show Random Markers</button>
  `
})
export class AppComponent {
  positions = [];

  showRandomMarkers() {
    let randomLat: number, randomLng: number;
    this.positions = [];
    for (let i = 0 ; i < 9; i++) {
      randomLat = Math.random() * 0.0099 + 43.7250;
      randomLng = Math.random() * 0.0099 + -79.7699;
      this.positions.push([randomLat, randomLng]);
    }
  }

  showInfoWindow(marker) {
    marker.ng2MapComponent.openInfoWindow(
      'iw',    // id of InfoWindow
      marker,  // anchor for InfoWindow
      {        // local variables for InfoWindow
        lat: marker.getPosition().lat(),
        lng: marker.getPosition().lng(),
      }
    );
  } 
}

模块文件:

import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { Ng2MapModule } from 'ng2-map';

@NgModule({
  imports: [
    RouterModule.forChild(AlertsRoutes),  
    Ng2MapModule.forRoot({apiUrl: 'https://maps.google.com/maps/api/js?key=mykey'})
  ]
})
export class TestModule { }

还有如何启用绘图管理器?

【问题讨论】:

  • 从 ng2-map 的文档中,您似乎需要执行标准的 @NgModule({imports:Ng2MapModule.forRoot()}) 事情并将其传递给 apiUrl。您能否展示您的模块文件,以便我准备完整的回复?
  • 明确一点,您不是以编程方式使用 DrawingManager 吗?您只是在模板中使用它,但无论如何您都会从 ng2-map 代码本身得到这个错误。我的理解正确吗?

标签: javascript google-maps angular


【解决方案1】:

ng2-map 给出的示例 [1] 将 '&amp;libraries=visualization,places,drawing' 附加到模块导入中。我找不到有关可用库的特定文档,但您可能想先尝试全部 3 个,然后看看是否可以删除其中一些。

它会将你的 NgModule 代码更改为:

@NgModule({
  imports: [
    RouterModule.forChild(AlertsRoutes),  
    Ng2MapModule.forRoot({apiUrl: 'https://maps.google.com/maps/api/js?key=mykey&libraries=visualization,places,drawing'})
  ]
})

[1]https://github.com/ng2-ui/ng2-map/blob/0e0bd891623fe4adc6a7ea78e76cf1e36456eb8b/app/main.ts

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2020-09-20
  • 2016-07-25
  • 2023-03-06
  • 1970-01-01
  • 2018-12-15
  • 2012-07-22
相关资源
最近更新 更多