Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 2传单:地图容器已初始化_Angular_Leaflet - Fatal编程技术网

Angular 2传单:地图容器已初始化

Angular 2传单:地图容器已初始化,angular,leaflet,Angular,Leaflet,我通过导入传单Typescript命名空间初始化了一个映射,但每次实例化一个新组件(包含映射)时,映射都会被重新初始化,这使我遇到一些问题。以下是组件的代码: import { Component, Input, OnInit} from '@angular/core'; import { MapDetail } from './map'; @Component({ selector:'map-detail', templateUrl:

我通过导入传单Typescript命名空间初始化了一个映射,但每次实例化一个新组件(包含映射)时,映射都会被重新初始化,这使我遇到一些问题。以下是组件的代码:

    import { Component, Input, OnInit} from '@angular/core';

    import { MapDetail } from './map';

    @Component({
        selector:'map-detail',
        templateUrl: 'views/map.html'
    })
    export class MapDetailComponent implements OnInit {
        @Input()   map: MapDetail;

        ngOnInit(): void {

            var div = document.getElementById('map');
            var mymap : L.Map = L.map(div, {
                center: L.latLng(47.137,  1.890),
                zoom: 7,    
                dragging: true,
                [More options ...]
            });

        var tileLayer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png?', {
                minZoom: 3,
                maxZoom: 18,
            });


            tileLayer.addTo(mymap);
        }
    }
以及HTML:

<div id="mapid"></div>

任何想法/暗示都将不胜感激

更新:ngOnInit被调用两次。我以前用过电话服务。现在因为它是一个空白页,所以我直接调用这个组件

更新2:似乎与此问题有关
有任何已知的解决方法吗?

您只需在类的私有成员中记录
div
mymap
,并仅在该成员
未定义时初始化映射

但是,如果页面上有多个该组件的实例,则可能仍然存在问题。我不确定ShadowDOM如何处理具有相同ID的div的组件


或者只需在使用传单初始化地图容器之前先检查地图容器是否为空。

您只需在类的私有成员中记录您的
div
mymap
,并且仅当该成员
未定义时初始化地图

但是,如果页面上有多个该组件的实例,则可能仍然存在问题。我不确定ShadowDOM如何处理具有相同ID的div的组件


或者,在使用传单初始化地图容器之前,只需先检查地图容器是否为空。

您也可以尝试以下方法来实现地图:

您也可以尝试以下方法来实现地图:

我添加了HTML。该成员将永远不会未定义,因为它存在。我可以做一些检查,看看里面是否有内容,但我不确定这是否是一种有角度的方式。也不确定什么是阴影DOM。让我看看。这个解决方案对我不起作用。当我实例化一个新组件时,构造函数和ngnit函数都会重新运行。他们都说私人成员每次都未定义,因此错误仍然存在。@carpiediem您可能对该错误感兴趣:@ghybs非常感谢,我会试试。@carpiediem-Thx的反馈,很高兴它帮助了您!请随意投票。我添加了HTML。该成员将永远不会未定义,因为它存在。我可以做一些检查,看看里面是否有内容,但我不确定这是否是一种有角度的方式。也不确定什么是阴影DOM。让我看看。这个解决方案对我不起作用。当我实例化一个新组件时,构造函数和ngnit函数都会重新运行。他们都说私人成员每次都未定义,因此错误仍然存在。@carpiediem您可能对该错误感兴趣:@ghybs非常感谢,我会试试。@carpiediem-Thx的反馈,很高兴它帮助了您!请随意投票。有没有办法用OSM代替谷歌地图?有没有办法用OSM代替谷歌地图?