Vue Layers Map 未显示在 Vuetify 对话框中
Vue Layers Map not showing on Vuetify dialog
我正在开发一个使用 Vue-Layers 显示 OpenStreetMap 地图的 Vuetify 应用程序。
在页面级别工作正常,但我有一个全屏 Vuetify 对话框,我希望能够从中 select 映射点。
地图没有显示。
对话框的代码是:
<template>
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
<template v-slot:activator="{ on }">
<v-btn color="primary" dark v-on="on">Create PID Group</v-btn>
</template>
<v-toolbar
color="black"
dark
fixed
>
<v-toolbar-side-icon @click="dialog=false">
<v-icon>close</v-icon>
</v-toolbar-side-icon>
<v-toolbar-title>Create PID Group</v-toolbar-title>
<v-spacer></v-spacer>
<v-toolbar-items>
<v-btn dark flat @click="onSave">Save</v-btn>
</v-toolbar-items>
</v-toolbar>
<div class="mapContainer" style="background-color: pink">
<v-sheet>
<vl-map
:load-tiles-while-animating="true"
:load-tiles-while-interacting="true"
@click="clickCoordinate = $event.coordinate"
:controls="false"
class="minimap"
:z-index="100000"
>
<vl-view :zoom.sync="zoom" :rotation.sync="rotation"></vl-view>
<vl-layer-tile id="osm">
<vl-source-osm></vl-source-osm>
</vl-layer-tile>
</vl-map>
</v-sheet>
</div>
</v-dialog>
</template>
<script>
export default {
name: "CreatePidGroupDialog",
data() {
return {
dialog: false,
zoom: 16,
rotation: 0,
clickCoordinate: undefined,
}
},
methods: {
onSave() {
this.dialog = false
},
},
}
</script>
<style scoped>
.mapContainer {
position: relative;
width: 100%;
height: 100vh;
}
.minimap {
height: 168px;
width: 300px;
border: 1px solid black;
}
</style>
地图容器的大小肯定是 300px x 168px
Chrome 开发人员工具中没有显示控制台错误。
为什么地图没有显示?
我遇到了同样的问题,发现在显示对话框时您需要刷新地图。在 vl-map 组件上放置一个 ref="map" 并执行以下操作(在打字稿中):
this.dialog = true; // show the dialog
// at the next tick refresh the map so you are sure it detects it is now visible
this.$nextTick(() => {
(this.$refs.map as any).refresh();
});
我正在开发一个使用 Vue-Layers 显示 OpenStreetMap 地图的 Vuetify 应用程序。
在页面级别工作正常,但我有一个全屏 Vuetify 对话框,我希望能够从中 select 映射点。
地图没有显示。
对话框的代码是:
<template>
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
<template v-slot:activator="{ on }">
<v-btn color="primary" dark v-on="on">Create PID Group</v-btn>
</template>
<v-toolbar
color="black"
dark
fixed
>
<v-toolbar-side-icon @click="dialog=false">
<v-icon>close</v-icon>
</v-toolbar-side-icon>
<v-toolbar-title>Create PID Group</v-toolbar-title>
<v-spacer></v-spacer>
<v-toolbar-items>
<v-btn dark flat @click="onSave">Save</v-btn>
</v-toolbar-items>
</v-toolbar>
<div class="mapContainer" style="background-color: pink">
<v-sheet>
<vl-map
:load-tiles-while-animating="true"
:load-tiles-while-interacting="true"
@click="clickCoordinate = $event.coordinate"
:controls="false"
class="minimap"
:z-index="100000"
>
<vl-view :zoom.sync="zoom" :rotation.sync="rotation"></vl-view>
<vl-layer-tile id="osm">
<vl-source-osm></vl-source-osm>
</vl-layer-tile>
</vl-map>
</v-sheet>
</div>
</v-dialog>
</template>
<script>
export default {
name: "CreatePidGroupDialog",
data() {
return {
dialog: false,
zoom: 16,
rotation: 0,
clickCoordinate: undefined,
}
},
methods: {
onSave() {
this.dialog = false
},
},
}
</script>
<style scoped>
.mapContainer {
position: relative;
width: 100%;
height: 100vh;
}
.minimap {
height: 168px;
width: 300px;
border: 1px solid black;
}
</style>
地图容器的大小肯定是 300px x 168px
Chrome 开发人员工具中没有显示控制台错误。
为什么地图没有显示?
我遇到了同样的问题,发现在显示对话框时您需要刷新地图。在 vl-map 组件上放置一个 ref="map" 并执行以下操作(在打字稿中):
this.dialog = true; // show the dialog
// at the next tick refresh the map so you are sure it detects it is now visible
this.$nextTick(() => {
(this.$refs.map as any).refresh();
});