vue2使用高德地图自定义弹窗InfoWindow信息窗内绑定点击事件及传值

2,079 阅读1分钟

一、问题复现

  • 通过自定义信息窗生成标记后点击触发的事件,在methods无法触发相应事件,显示当前事件未定义
  • 注意:此处必须是onclick进行事件绑定

自定义信息窗添加事件

getGraphicMarker(item) {
            //此处item.target._opts.extData.id为自定义属性,实际使用可参考自定义属性文档
            //通过模版字符串传递参数
            //亦可通过push或splice等方法对content的内容进行替换删除添加等,使用更灵活
            let content = [
                "<div class='contentInfo' style='background-color: #fff;'>",
                "<div class='contentInfo_btn' style='font-size:14px;'>",
                `<i onclick='delClick(${item.target._opts.extData.id})'>删除</i>`,
                `<i onclick='editClick(${item.target._opts.extData.id})'>修改</i>`,
                "</div>",
                "<span onclick='closeClick()'>x</span>",
                "</div>",
            ];
            //此处infoWindow已在data中定义,便于全局操作信息框
            this.infoWindow = new AMap.InfoWindow({
                isCustom: true, //使用自定义窗体
                content: content.join("<br>"), //传入字符串拼接的 DOM 元素
                position: new AMap.LngLat(item.lnglat.lng, item.lnglat.lat),
                anchor: "top-left",
                // offset: new AMap.Pixel(-16, -45),
            });
            this.infoWindow.open(this.map);
        },

待触发事件

methods: {
        closeClick() {
            console.log('关闭');
            this.infoWindow.close()
        },
        delClick(e) {
            console.log('删除', e);
        },
        editClick(e) {
            console.log('编辑', e);
        },
   },

二、解决方案

  • 将定义标记后点击触发的事件放在钩子函数里,成功触发事件,参数也显示正常
created() {
        window.closeClick = () => {
            console.log('关闭');
            this.infoWindow.close()
        }
        window.delClick = (e) => {
            console.log('删除', e);
        }
        window.editClick = (e) => {
            console.log('编辑', e);
        }
    },