gpt4 book ai didi

angular - DOM 对象存在后在 angular2 组件中初始化传单映射

转载 作者:太空狗 更新时间:2023-10-29 18:16:18 27 4
gpt4 key购买 nike

我目前正在尝试在 Angular Material 2 tab-group 内创建传单贴图,如下所示

import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { MaterialModule } from '@angular/material';

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

@Component({
selector: 'minimap',
template: `<div #minimap [id]="id" class=leaflet-map></div>`
})
export class MiniMap implements OnInit, OnDestroy {
map: L.Map = null;
id: string;

constructor() {
this.id = "map" + Date.now();
}

ngOnInit() {
this.map = L.map(this.id).setView([54.5, -115.0], 13);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution:
'&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(this.map);
}

ngOnDestroy() { }
}

@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
<md-tab-group>
<md-tab label="tab 1">
tab 1 content
</md-tab>
<md-tab label="tab 2">
tab 2 content
</md-tab>
<md-tab label="map tab">
<minimap></minimap>
</md-tab>
</md-tab-group>
</div>
`,
})
export class App {
name:string;
constructor() {
this.name = 'Angular2'
}
}

https://plnkr.co/edit/dLwhv3XoMWMYFkqztkuR?p=preview

不幸的是,当它试图在组件中创建 map 时,它会抛出一个错误,指出 map 容器尚不存在。我的解释是代码当前在创建 DOM 对象之前正在运行。

创建 map 以便在 DOM 对象存在时调用代码的正确方法是什么?

最佳答案

看起来直接引用 map 容器元素(通过 @ViewChild)没有问题。

import {Component, ViewChild} from '@angular/core';
import 'leaflet';

@Component({
selector: 'minimap',
template: `<div #mapDiv></div>`
})
export class MiniMap implements OnInit {
@ViewChild('mapDiv') mapContainer;

ngOnInit() {
this.map = L.map(this.mapContainer.nativeElement);
}
}

更新的 Plunk:https://plnkr.co/edit/HGWb3J1f5HL8shFW9EUN?p=preview

但是,一旦显示选项卡(至少是第一次),您似乎需要重新初始化 map 大小。参见 Data-toggle tab does not download Leaflet map

关于angular - DOM 对象存在后在 angular2 组件中初始化传单映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com