uni-app nvue页面使用map地图的circles无法重新更新圆的位置信息
uni-app nvue页面使用map地图的circles无法重新更新圆的位置信息
地图相关配置
HTML部分
<map id="myMap" :style="'width: '+ windowWidth +'px; height: '+ windowHeight +'px;'" :longitude="longitude"
latitude="latitude" scale="10" :markers="markers" @markertap="markertap" show-scale :circles="circles"
@regionchange="regionchangetab"></map>
JS部分
circles: [{
latitude: 34.831234072649124,
longitude: 113.51750879996204,
fillColor: "#e6060a6A",
color: "#e6060a6A",
radius: 25000,
strokeWidth: 2
}],
修改圆数据方法
regionchangetab(e) {
console.log("hahaah", e);
let that = this;
if (e.type == "end") {
setTimeout(() => {
uni.createMapContext("myMap", this).getCenterLocation({
type: 'gcj02',
success: (res) => {
console.log("当前地图中心的经纬度", res)
that.latitude = res.latitude;
that.longitude = res.longitude;
let circlesinfo = [{
latitude: that.latitude,
longitude: that.longitude,
fillColor: "#e6060a6A",
color: "#e6060a6A",
radius: 50000,
strokeWidth: 2
}]
that.circles = JSON.parse(JSON.stringify(circlesinfo))
},
fail: (err) => {}
})
}, 400);
}
}
1 回复
在uni-app的nvue页面中,如果你遇到了使用map
组件的circles
无法重新更新圆的位置信息的问题,这通常是因为circles
数组在更新时,Vue的响应式系统没有正确检测到变化。以下是一个可能的解决方案,通过手动操作DOM或使用特定的数据结构来触发更新。
示例代码
首先,确保你的nvue
页面中已经包含了map
组件,并且你已经定义了初始的circles
数据。
<template>
<div>
<map
id="map"
:latitude="latitude"
:longitude="longitude"
:scale="14"
:circles="circles"
style="width: 100%; height: 300px;"
/>
<button @click="updateCircle">Update Circle</button>
</div>
</template>
<script>
export default {
data() {
return {
latitude: 39.908823,
longitude: 116.397470,
circles: [
{
latitude: 39.908823,
longitude: 116.397470,
radius: 1000,
color: '#FF0000DD',
strokeWidth: 2,
strokeColor: '#FF0000'
}
]
};
},
methods: {
updateCircle() {
// 更新circles数组中的位置信息,但不直接修改原数组引用
const newCircles = [...this.circles];
newCircles[0].latitude += 0.001; // 例如,将纬度增加一个小值
newCircles[0].longitude += 0.001; // 例如,将经度增加一个小值
// 使用setTimeout模拟异步更新,确保Vue的响应式系统能够捕获到变化
setTimeout(() => {
this.$set(this, 'circles', newCircles);
}, 0);
}
}
};
</script>
解释
-
数据定义:在
data
中定义了latitude
、longitude
和circles
,其中circles
是一个包含圆信息的数组。 -
按钮点击事件:定义了一个按钮,当点击时调用
updateCircle
方法。 -
更新circles:在
updateCircle
方法中,通过创建一个新数组newCircles
来复制原始的circles
数组,并修改新数组中的圆的位置信息。 -
异步更新:使用
setTimeout
来模拟异步更新,确保Vue的响应式系统能够捕获到数组的变化。直接修改数组的元素并不会触发Vue的响应式更新,因此需要创建一个新数组并重新赋值给circles
。
通过这种方式,你可以确保在nvue页面的map组件中,circles的位置信息能够被正确地更新。