Angular集成Leaflet:Marker点击触发Modal组件自动弹出问题排查
解决Leaflet Marker自动弹出Modal的问题
嘿,这个问题我之前也踩过坑!你现在的问题核心很简单:你在绑定Marker的点击事件时,直接执行了this.navigate(this.LocationID),而不是把这个方法作为回调函数传递给事件监听器。这就导致代码运行到这一行的时候,navigate方法立刻被调用,Modal自然就自动弹出来了,根本等不到你点击Marker。
怎么修复?
很简单,只需要把navigate调用包装成一个箭头函数,这样只有当Marker被点击时,navigate才会被执行。同时还要注意在Angular里用箭头函数能保留组件的this上下文,避免出现找不到modalController的问题。
修改后的完整Marker代码
let m = new L.Marker([33, 44], { icon: new L.DivIcon({ className: 'my-div-icon', html: ` <div> <img src="${f[1].weather_status_icon_ar}" style="width: 30px;height: 30px;"> </div>` }) }) // 用箭头函数包装,确保点击时才触发navigate .addEventListener('click', () => this.navigate(this.LocationID)) .addTo(this.weather);
另外我还帮你修正了一个小问题:你原来的img标签里,src的闭合引号写错位置了(原本写在了/style前面),现在已经调整过来,避免HTML渲染出错。
为什么这样有效?
箭头函数() => this.navigate(this.LocationID)会被作为一个函数引用传递给addEventListener,只有当点击事件发生时,这个箭头函数才会被执行,进而调用navigate方法打开Modal。而你之前的写法是直接执行navigate,并把它的返回值(undefined)传递给了事件监听器,这显然不是你想要的效果。
内容的提问来源于stack exchange,提问作者Ali Ghassan
相关产品推荐
相关产品推荐

