我在一个显示一些数据的项目中(我正在使用 vue2-leaflet)。事情是这样的,我有一个 Target 组件:
<template>
<l-marker
v-on:click="detailsMarker(item)"
:lat-lng="latLng"
>
<l-icon :icon-size="[80, 80]">
<div class="flex flex-col items-center">
<img
class="object-cover w-20 h-20 border-2 border-white rounded-full"
:src="picture"
/>
<Badge :badge="name" />
</div>
</l-icon>
</l-marker>
</template>
<script>
import { mapActions } from 'vue-stator'
export default {
name: 'Target',
data () {
return {
item: {}
}
},
props: {
picture: String,
name: String,
latLng: Array
},
methods: {
...mapActions(['detailsMarker'])
}
}
</script>
如您所见,我从 store.js 文件中导入了 detailsMarker 方法(使用 vue-stator,一种类似 vuex 的状态管理):
import Vue from 'vue';
import L from 'leaflet';
import { plugin as VueStator } from 'vue-stator';
Vue.use(VueStator, {
state: () => ({
detailsMenu: false,
selectedMarker: {},
...
}),
actions: {
detailsMarker(state, selectedItem) {
this.state.selectedMarker = selectedItem;
this.state.detailsMenu = true;
}
}
})
然后我将 Target 组件导入到我的 Paris 路线中,在那里我对其中的数据进行了循环:
<template>
<div>
<Target
v-for="item in targets"
:key="item.id"
:latLng="item.latLng"
:picture="item.image"
:name="item.name"
/>
</div>
</template>
<script>
export default {
data () {
return {
targets: [
{
name: "Viktor Novikov",
image: "https://static.wikia.nocookie.net/hitman/images/a/a0/Viktor_novikov.png",
description: "A self-made billionaire ...",
latLng: [40.7878, -74.2196]
},
{
name: "Dalia Margolis",
description: "The right face at the right time, ...",
image: "https://static.wikia.nocookie.net/hitman/images/c/ce/Dalia_margolis.png",
latLng: [40.7878, -74.1396]
}
]
}
},
computed: {
...mapState([
'selectedMarker',
'detailsMenu'
])
},
</script>
因此,当我单击我的标记时,detailsMarker 方法确实显示了侧边栏组件(带有 detailsMenu 数据),但它没有选择目标数组中的对象。我不明白为什么,因为在控制台中我没有错误。