angular - 添加附加点时,agm-polygon 不更新
问题描述
编辑:我为此添加了一个堆栈闪电战。这是我的第一个,所以我希望它有效。
https://stackblitz.com/edit/angular-dlabgk
几年来我一直在使用谷歌地图,最近将每一个都迁移到 AgmMaps。最近看到一些关于在地图上绘制多边形的问题,想创建一个非常简单的demo。我将此添加到工作地图项目中:
<agm-polygon [strokeColor]="'red'" [strokeWeight]="4" [paths]="polygonPts">
</agm-polygon>
像这样声明我的数组:
polygonPts: Array<google.maps.LatLng>[] = [];
然后在我的 mapReady 函数中,我添加了一些有效点:
this.polygonPts = [
new google.maps.LatLng(34.85052636946416, -117.40498588867183),
new google.maps.LatLng(36.28034702299417,-112.48311088867183),
new google.maps.LatLng(39.87662851819041, -114.76826713867183),
new google.maps.LatLng(38.03141086161898,-121.18428276367183)
];
一切都按预期工作,因为它在美国的西南部分绘制了一个多边形。下一步是将其扩展一点,以便我可以单击地图并添加点。我在 mapClick 的 agm-map 元素上添加了一个处理程序:
(mapClick)="mapClick($event)"
然后将点添加到数组中:
mapClick(e) {
let latlng = new google.maps.LatLng(e.coords.lat, e.coords.lng);
this.polygonPts.push(latlng);
this.ptsString = JSON.stringify(this.polygonPts);
}
我将 ptsString 添加到模板中,这样我就可以直观地看到我的数组正在增长,但似乎无法更新地图。我检查了 NgZone 以确保我在区域中,并且还尝试了 this.zone.run 无济于事。文档似乎很清楚,您可以在路径部分执行此操作:“从数组中插入或删除 LatLngs 将自动更新地图上的多边形。”
我浏览了 StackBlitz ( https://stackblitz.com/edit/agm-polygon?file=app%2Fapp.component.html ) 上的示例,但这似乎非常复杂,并且试图用更少的代码来完成。这是唯一的方法还是我错过了什么?
解决方案
经过一些实验,我将问题缩小到在数组上使用 push 函数。我希望我能解释为什么使用 push 是一个问题,但更改为扩展运算符以将项目添加到数组中解决了这个问题。
我将 mapClick() 函数更新为:
let ll = new google.maps.LatLng(event.coords.lat, event.coords.lng);
this.polygonPts = [...this.polygonPts, ll];
this.ptsList = JSON.stringify(this.polygonPts);
我还更新了 stackbltiz: https ://stackblitz.com/edit/angular-dlabgk
推荐阅读
- reactjs - 什么是 redux 中的 props 方法是如何附加到它的
- ios - 在 UITableView 中只播放一个 AVPlayer 视频
- ios - 关闭 AVPlayerViewController 不会“杀死”对象 - 它会持续存在
- git - 我在 GitHub 上合并了一个拉取请求,我必须更改该提交的作者。如何?
- cmake - 如何使用 Homebrew 安装 cmake 3.12 版
- jquery - 使用 webpacker 和 coffeescript 未触发 jquery 事件
- excel - Excel VBA函数返回一个工作链接到文书工作
- xamarin - 在 ListView(Xamarin Forms)上滚动项目时如何计算位置值(高度)?
- c - 如何将复数(复整数)与C中的整数相乘?
- linux - group 的所有命令都应该成功或没有