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