当我想使用“打开图层”加载多个地图时,我在Angular应用中有此代码:
<div *ngFof="let map of maps">
<map id="{{ 'map' + map.id }}" class="map"></map>
</div>
在我的组件中,当我尝试通过ID(目标)获取此地图时,似乎地图标签尚未准备好,因此未显示该地图。
ngOnInit() {
this.mapService.getMaps().subscribe(
resp => {
this.maps = resp;
},
error => {
console.log(error);
}
);
}
ngAfterViewInit() {
this.maps.forEach(item => {
let map = new ol.Map({
target: 'map' + item.id,
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([0, 0]),
zoom: 2
})
});
this.maps.push(map);
});
}
我尝试了几种看到谷歌搜索的解决方案,但是我无法运行我的代码,因此在创建地图(new ol.Mapl(...)
)时map
标签尚未呈现。
答案 0 :(得分:0)
我认为您的getMaps
订阅会在ngAfterViewInit
代码之后触发,那时maps
变量将为空。
在将值分配给地图后,尝试将for循环放入。
ngOnInit() {
this.mapService.getMaps().subscribe(
resp => {
this.maps = resp;
this.maps.forEach(item => {
let map = new ol.Map({
target: 'map' + item.id,
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([0, 0]),
zoom: 2
})
});
this.maps.push(map);
});
},
error => {
console.log(error);
}
);
}
另一个问题是,我在maps
循环中扩展了forEach
数组。
答案 1 :(得分:0)
我使用ViewChild
和ngAfterViewInit
解决了我的问题:
@ViewChild('map') mapViewChild: ElementRef;
和
ngAfterViewInit() {
this.map.setTarget(this.target);
}
因此,我在onInit
函数中初始化了地图,并在ngAfterViewInit
函数中设置了标签目标。