#javascript #vue.js #leaflet #vuetify.js
#javascript #vue.js #листовка #vuetify.js
Вопрос:
Я пытаюсь открыть v-dialog при нажатии на маркер, но я не знаю, как я могу это сделать.
Я уже пытаюсь создать метод в скрипте vue, но я не знаю, как открыть его таким образом, и я не могу вызвать этот метод. Я также пытался напрямую создать экземпляр, но у меня не получилось.
Javascript
for(var i = 0; i < coord.total; i ){
L.marker([lat,long], {title: name}).addTo(mymap).on('click', function(e) {
//Open the v-dialog
});
}
Vue
<v-dialog v-model="dialog" width="600px">
<v-btn slot="activator" flat color="blue darken-3">
<v-icon right>info</v-icon>
</v-btn>
//Some stuff
<script>
export default {
name: 'Detail',
data() {
return {
dialog: false
}
},
props: {
equip: Object,
}
}
</script>
Спасибо за помощь
Комментарии:
1. Если я хорошо понимаю, что вы хотите сделать, это динамически внедрить компонент. Я никогда этого не делаю, но эта ссылка : css-tricks.com / … следует объяснить, как выполнить трюк
Ответ №1:
С пакетом «vue2-leaflet» это довольно просто. Вот пример компонента:
<template>
<v-container fluid fill-height class="ma-0 pa-0">
<v-dialog v-model="dialog" max-width="290">
<v-card>
<v-card-title class="headline">A Dialog Box attached to a Marker :-)</v-card-title>
<v-card-actions>
<v-btn color="primary" @click="dialog = false">Close</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-img height="100%" width="100%">
<l-map ref="map" id="karte" :zoom="zoom" :center="center">
<l-tile-layer url="http://{s}.tile.osm.org/{z}/{x}/{y}.png"></l-tile-layer>
<l-marker :lat-lng="marker" @click="dialog = true"></l-marker>
</l-map>
</v-img>
</v-container>
</template>
<script>
import L from 'leaflet';
import { LMap,LMarker, LTileLayer} from 'vue2-leaflet';
import 'leaflet/dist/leaflet.css'
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png')
});
export default {
components: { LMap, LTileLayer, LMarker},
data() {
return {
zoom:16,
center: L.latLng(48.13,11.6),
marker: L.latLng(48.13,11.6),
dialog: false
}
}
};
</script>