Было 3 проблемы, из-за которых это происходило.
- Во-первых - я забыл загрузить листовку css в
main.js
- вот почему карта листовок была как-то вне модальной области.
//main.js
import '@babel/polyfill';
import Vue from 'vue';
import './plugins/bootstrap-vue';
import App from './App.vue';
import router from './router';
import store from './store';
//above imports not important to this answer
import 'leaflet/dist/leaflet.css'; //<--------------add this line
Vue.config.productionTip = false;
new Vue({
router,
store,
render: h => h(App),
}).$mount('#app');
Теперь карта может исчезнуть.Установите ширину и высоту для контейнера компонента
l-map
.
<div class="foobar1">
<l-map :center="center" :zoom="13">
<l-tile-layer :url="url" :attribution="attribution"></l-tile-layer>
<l-marker :lat-lng="center"></l-marker>
</l-map>
</div>
<style lang="scss">
.foobar1 {
width: 100%;
height: 400px;
}
</style>
Теперь ваша карта будет отображаться в модальном режиме, но если вы переместите вид карты, вы увидите, что листовка не загружает квадраты карт во времени.Вы увидите что-то вроде этого:
Чтобы исправить это, создайте обработчик событий на b-modal
для события @shown
.
<b-modal
size="lg"
:visible="visible"
@hidden="$emit('clear')"
title="Event details"
@shown="modalShown"
>
Я назвал мой modalShown
.
Затем добавьте атрибут ref
к вашему l-map
.Я вызвал мой mymap
.
<l-map :center="center" :zoom="13" ref="mymap">
<l-tile-layer :url="url" :attribution="attribution"></l-tile-layer>
<l-marker :lat-lng="center"></l-marker>
</l-map>
Затем создайте метод modalShown
в методах Vue для вашего представления / компонента и вызовите invalidateSize()
внутри.Я не знаю, почему это работает.invalidateSize
является частью нативного API листовки ( vue2leaflet - просто оболочка ), и мы вызываем его в этом методе.
export default {
data() {
//some data here
}
methods: {
modalShown() {
setTimeout(() => {
this.$refs.mymap.mapObject.invalidateSize();
}, 100);
}
}
}
Теперь вседолжно быть в порядке - карта не должна выходить за пределы модальной, карта должна быть видимой (дух), и квадраты карты должны быть загружены, когда они находятся в теле карты.
Вот мой полный код,он содержит некоторые вещи, специфичные для моего приложения, но в целом он содержит все приведенные выше фрагменты кода.