Angular-google-maps: 您已在此页面上多次包含 Google Maps API

创建于 2016-10-02  ·  19评论  ·  资料来源: SebastianM/angular-google-maps

我知道这个问题发生在其他人身上,但我一直坚持下去,找不到任何解决方案。

这是我的@NgModule

import { NgModule } from '@angular/core';
import { AgmCoreModule } from 'angular2-google-maps/core/index';

// Global vars
import appGlobals = require('./../globals');

@NgModule({
    imports:      [ AgmCoreModule.forRoot({
                        apiKey: appGlobals.googleMapsApiKey
                    }) ],
})

export class JobSearchModule {}

这是我的 HTML:

<div class="col-md-12 google-maps-container">
        <sebm-google-map [latitude]="mapLat"
                         [longitude]="mapLng"
                         [mapDraggable]="false"
                         [zoom]="zoom"
                         [zoomControl]="false"
                         [streetViewControl]="false"
                         (mapClick)="mapClicked($event)">
            <sebm-google-map-marker [latitude]="mapLat"
                                    [longitude]="mapLng">

            </sebm-google-map-marker>
        </sebm-google-map>
    </div>

这是我在 HTML 头标签中的截图:

screen shot 2016-10-02 at 13 36 15

所以看起来它确实包含了两次 API,但我不知道为什么或如何。

MapsAPILoader

最有用的评论

@escarabin我有类似的问题。 尝试这个。

您需要在根应用程序模块中导入地图,因此您可以执行以下操作:

@NgModule({
    declarations: [
        ...
    ],
    imports: [
        ...,
        AgmCoreModule.forRoot({
            apiKey: 'some key here'
        })
    ],

但是,如果您想在不属于该模块的组件中使用地图,请转到该模块并执行以下操作:

@NgModule({
    declarations: [
        SomeComponentThatHasMapsInItsHtml,
        .....
    ],
    imports: [
        AgmCoreModule,
        ...
    ],

所有19条评论

@escarabin问题是您将模块导入应用程序的子模块中。 您必须在应用程序的根模块中导入它。 关闭它,因为这不是错误。 随意重新打开。 谢谢!

嘿@SebastianM! 感谢您的建议,但我仍然面临这个问题。
这是我的配置:

  • 我需要在名为job-search-module.ts的子模块中使用angular2-google-maps
  • 我有一个shared.module.ts ,其中包含我在其他几个模块中使用的所有组件和模块。
  • 我的根模块是app.module.ts

现在,当我在 app.module.ts 中导入AgmCoreModule时,我看到一条错误消息,指出sebm-google-map不是我的job-search-module.ts的一部分,并且没有显示任何映射。
当我在shared.module.tsjob-search.module.ts中导入AgmCoreModule时,我看到 _“您已在此页面上多次包含 Google Maps API”_。

那我该怎么办?

PS:我没有能力重新打开问题

任何人? :(我现在很坚持

@escarabin我有类似的问题。 尝试这个。

您需要在根应用程序模块中导入地图,因此您可以执行以下操作:

@NgModule({
    declarations: [
        ...
    ],
    imports: [
        ...,
        AgmCoreModule.forRoot({
            apiKey: 'some key here'
        })
    ],

但是,如果您想在不属于该模块的组件中使用地图,请转到该模块并执行以下操作:

@NgModule({
    declarations: [
        SomeComponentThatHasMapsInItsHtml,
        .....
    ],
    imports: [
        AgmCoreModule,
        ...
    ],

要添加我认为这可行的原因,是因为您需要在应用程序的根目录中注册该事物(以便使用您的密钥初始化 google 内容)。

但是您在属于另一个模块的组件中使用<seb-maps-smth-smth> ,因此您需要将 AgmCoreModule 添加为导入,以便它可以在此模块中找到具有选择器seb-maps-smth-smth的导出组件。

希望能解决问题

非常感谢@EddyP23的努力,但不幸的是我仍然看到错误......它真的在你身边使用[email protected]吗? 这很奇怪。

问题不在于错误本身,而是在页面上导致了一堆完全随机的错误......

另外,您在谈论<seb-maps-smth-smth> 。 我不使用这个标签,也没有在文档中看到它。 我正在使用<sebm-google-map>

@escarabin是的,我使用的是 0.15.0 版。

我的意思是任何seb-maps-{placeholder}选择器。 我的 HTML 看起来像:

<sebm-google-map #sebmGoogleMap
        [latitude]="myVar1"
        [longitude]="myVar2"
        (idle)='onIdle()'
        [zoom]='mapZoomLevel'
        [streetViewControl]='false'
        >
            <sebm-google-map-marker #marker
                [latitude]="myVar3"
                [longitude]="myVar4"
                ></sebm-google-map-marker>
    </sebm-google-map>

你现在看到什么错误? 我相信这个设置应该可以工作。 你能分享更多的代码吗?

我仍然看到“您在此页面上多次包含 Google Maps API”错误。

我的 HTML 如下所示:

<sebm-google-map #sebmGoogleMap
                         [latitude]="mapLat"
                         [longitude]="mapLng"
                         [mapDraggable]="false"
                         [zoom]="zoom"
                         [zoomControl]="false"
                         [streetViewControl]="false"
                         (mapClick)="mapClicked($event)">
            <sebm-google-map-marker [latitude]="mapLat"
                                    [longitude]="mapLng">

            </sebm-google-map-marker>
</sebm-google-map>

这是我的子模块:

import { NgModule } from '@angular/core';
import { jobSearchRouting } from './job-search.routes';
import { SharedModule }   from './../shared/shared.module';
import { AgmCoreModule } from 'angular2-google-maps/core/index';

// Components
import { SearchComponent } from './components/search.component';

@NgModule({
    declarations: [ SearchComponent ],
    imports:      [ jobSearchRouting,
                    AgmCoreModule,
                    SharedModule ]
})

export class JobSearchModule {}

和我的 app.module.ts @NgModule

@NgModule({
    declarations: [ AppComponent,
                    HomeComponent,
                    HeaderComponent,
                    FooterComponent,
                    PostComponent,
                    ClubComponent,
                    CandidateSignUpComponent,
                    PostPreviewComponent,
                    SignInComponent,
                    ProfileSubHeaderComponent,
                    RecruiterPromoComponent,
                    NotificationsComponent ],
    imports:      [ RouterModule,
                    HttpModule,
                    SharedModule,
                    BrowserModule,
                    AgmCoreModule.forRoot({
                        apiKey: appGlobals.googleMapsApiKey
                    }),
                    MetaModule.forRoot(metaConfig),
                    routing ],
    providers:    [ NotificationsService,
                    MetaService ],
    bootstrap:    [ AppComponent ],
})

嗯..这很奇怪。 您确定没有以旧方式在任何地方(例如在index.html中)导入谷歌地图的脚本标签吗? 像这样的东西:

<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
    </script>

我还会仔细检查AgmCoreModule的所有用法,以检查您是否没有在其他地方意外地两次导入它。

我也有这个问题。 我在 app.module 中为我的组件添加了 AgmCoreModule.forRoot({...}),并且检查了多个 google api 调用。
仍然返回相同的错误。

我也有这个问题。 我还在 app.module 中为我的组件添加了 AgmCoreModule.forRoot({...}),并且我还检查了多个 google api 调用。

好吧,我的错误,如果它可以帮助这里的其他人——尝试删除你的旧脚本标签,而不是把它注释掉。 出于某种原因,在模板中评论它并没有删除它。

@EddyP23 ,如果我使用 skd 自动完成和 agm 映射,我该怎么办?
因为它导入索引