uniapp中map组件动态添加覆盖物(解决数据更新而视图不更新)

uniapp中map组件动态添加覆盖物(解决数据更新而视图不更新)

uniapp的坑是真的多,每天都踩坑,日常记录一下在这里插入图片描述在这里插入图片描述

问题:map组件动态添加覆盖物时,数据更新了但视图没有更新

先介绍一下怎么使用map组件添加覆盖物,这里介绍Polygons(其他一样)

<map
	class="map"
	id="map"
	ref="map"
	:controls="controls"
	:scale="scale"
	:longitude="longitude"
	:latitude="latitude"
	:show-location="showLocation"
	@tap="maptap"
	:polyline="polyline"
	:polygons="polygons"
></map>

数据部分

data() {
		return {
			longitude: 119.30885015480821,
			latitude: 26.081970543514533
			controls: [
				{
					id: 1,
					position: {
						left: 5,
						top: 180,
						width: 30,
						height: 30
					},
					iconPath: '/static/logo.png',
					clickable: true
				}
			],
			showLocation: false,
			scale: 12,
			polyline: [],
			polygons: [],

		};
	},
	onReady() {
		//这里和上面map组件进行绑定
		this.map = uni.createMapContext('map', this);
	},

添加覆盖物

这里需要重点说明,要以数组的形式直接赋给 polygons 变量,不要用 push 一个一个对象直接加进polygons,那样无法正常渲染。
addPolygons() {
	const testPolygons = [{
            points: [{
                    latitude: 39.781892,
                    longitude: 116.293413
                },
                {
                    latitude: 39.787600,
                    longitude: 116.391842
                },
                {
                    latitude: 39.733187,
                    longitude: 116.417932
                },
                {
                    latitude: 39.704653,
                    longitude: 116.338255
                }
            ],
            fillColor: '#FFCCFF',
            strokeWidth: 3,
            strokeColor: '#CC99CC',
            zIndex: 11
        },
        {
            points: [{
                    latitude: 39.887600,
                    longitude: 116.518932
                },
                {
                    latitude: 39.781892,
                    longitude: 116.518932
                },
                {
                    latitude: 39.781892,
                    longitude: 116.428932
                },
                {
                    latitude: 39.887600,
                    longitude: 116.428932
                }
            ],
            fillColor: '#CCFFFF',
            strokeWidth: 5,
            strokeColor: '#CC0000',
            zIndex: 3
        }
    ];
     this.polygons = testPolygons;
},

动态添加polygons

 addPolygons() {
 	//添加一个polygons, 这里points的值自己修改
 	let polygon = {
            points: [{
                    latitude: 39.887600,
                    longitude: 116.518932
                },
                {
                    latitude: 39.781892,
                    longitude: 116.518932
                },
                {
                    latitude: 39.781892,
                    longitude: 116.428932
                },
                {
                    latitude: 39.887600,
                    longitude: 116.428932
                }
            ],
            fillColor: '#CCFFFF',
            strokeWidth: 5,
            strokeColor: '#CC0000',
            zIndex: 3
        };
        //这里记住先把原有的覆盖物拷贝一份
        let testPolygons = this.polygons;
        //把新的覆盖物加如数组
        testPolygons。push(polygon);
        //重新赋为polygons 
    	this.polygons = testPolygons;
},

本来说上面一套流程走下来没啥问题

但是
出问题了,数据是更新了,但没有渲染出来

最后在大佬的指点下,利用解构然后赋值的方法解决了

把上面的最后一行代码修改为:

this.polygons = [...testPolygons];

不明白为什么,感觉很神奇!!!
今天就记录到这
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是uniappmap组件的所有属性: | 属性名 | 类型 | 默认值 | 必填 | 描述 | | :----: | :--: | :----: | :--: | :--: | | id | String | | 否 | map组件的唯一标识符,用于在事件处理函数识别组件 | | style | String/Object | | 否 | map组件的样式,可以是一个字符串或对象 | | class | String | | 否 | map组件的class属性,用于设置组件的样式 | | latitude | Number | | 是 | 心点的纬度 | | longitude | Number | | 是 | 心点的经度 | | scale | Number | 16 | 否 | 缩放级别,取值范围为5-18 | | markers | Array | | 否 | 标记点,格式为[{id: 0, latitude: 0, longitude: 0, title: '', iconPath: '', width: '', height: '', callout: {}}],其callout为自定义标记点上方的气泡 | | polyline | Object | | 否 | 路线,格式为{points: [], color: '', width: '', dottedLine: false},其points为坐标数组,color为线的颜色,width为线的宽度,dottedLine为是否为虚线 | | circles | Array | | 否 | 圆形,格式为[{latitude: 0, longitude: 0, color: '', fillColor: '', radius: '', strokeWidth: 1}] | | controls | Array | | 否 | 控件,格式为[{id: 0, position: {}, iconPath: '', clickable: true}],其position为控件的位置,可选值为'leftTop'、'rightTop'、'rightBottom'、'leftBottom' | | include-points | Array | | 否 | 缩放视野以包含所有给定的坐标点,格式为[{latitude: 0, longitude: 0}] | | show-location | Boolean | false | 否 | 是否显示当前位置 | | polygons | Array | | 否 | 多边形,格式为[{points: [], strokeWidth: 1, strokeColor: '', fillColor: ''}] | | subkey | String | | 否 | 用于在腾讯地图开发平台申请的key | | layer-style | Number | 1 | 否 | 地图样式,可选值为0、1、2、3 | | rotate | Number | 0 | 否 | 旋转角度,范围为0-360,逆时针旋转 | | skew | Number | 0 | 否 | 倾斜角度,范围为0-40 | | enable-overlooking | Boolean | false | 否 | 是否开启俯视 | | enable-3D | Boolean | false | 否 | 是否开启3D模式 | | enable-compass | Boolean | false | 否 | 是否显示指南针 | | enable-zoom | Boolean | true | 否 | 是否支持缩放 | | enable-scroll | Boolean | true | 否 | 是否支持拖动 | | enable-rotate | Boolean | false | 否 | 是否支持旋转 | | enable-tilt | Boolean | false | 否 | 是否支持倾斜 | | setting | Object | {} | 否 | 地图设置,可设置以下属性:<br>showLocation: 是否显示当前位置<br>showScale: 是否显示比例尺<br>subKey: 用于在腾讯地图开发平台申请的key<br>style: 地图样式,可选值为'normal'、'satellite'、'dark'、'light'、'fresh'、'bus' | | bindregionchange | EventHandle | | 否 | 拖动地图时触发 | | bindtap | EventHandle | | 否 | 点击地图时触发 | | bindmarkertap | EventHandle | | 否 | 点击标记点时触发 | | bindcallouttap | EventHandle | | 否 | 点击标记点上方的气泡时触发 | | bindcontroltap | EventHandle | | 否 | 点击控件时触发 | | bindupdated | EventHandle | | 否 | 地图更新时触发 | | bindpoitap | EventHandle | | 否 | 点击地图上的坐标点时触发 |

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值