请问高德地图生成 map 实例,在 vue3 中应该如何传递给各个子组件呢? - V2EX
huoguo32

请问高德地图生成 map 实例,在 vue3 中应该如何传递给各个子组件呢?

  •  
  •   huoguo32 Mar 16, 2023 1525 views
    This topic created in 1167 days ago, the information mentioned may be changed or developed.

    最近的项目需要用到高德地图,在浏览器上展示一个高德地图,然后做各种打点,跳转中心点的操作.我遇到的最大的问题是,我希望可以在一个父组件 map.vue 上,创建一个 map 实例.然后在通过一个个小的子组件实现打点 /跳转之类的功能,

    //父组件创建 map const mapInstance = shallowRef(null) AMapLoader.load({ }).then((AMap) => { let map = new AMap.Map('container', { }) mapInstance.value = map }) 

    但我不知道我在父组件 map.vue 通过 AMapLoader.load 生成的这个 map 应该怎么传递给我的子组件呢? 我试过以下三种形式: 1.父传子,子再传给孙,但是太麻烦,需要一层层传下去,而且我发现我想通过数据生成点位时,发现地图实例没更新,需要刷一下才出现 2.pinia,pinia 折腾了好久,读取不到 map 的值.chatGPT 告诉我: "Pinia 的状态存储和 Vue.js 的响应式系统密切相关,因此,您可以将任何可以通过 Vue.js 响应式系统进行观察和更改的对象存储在 Pinia store 中,例如普通的 Javascript 对象、数组、函数等。 然而,高德地图生成的地图实例并不是一个简单的 Javascript 对象,它是一个包含大量底层逻辑和方法的复杂对象。尽管它可以通过 Javascript 的 typeof 运算符返回 object ,但它并不是一个可以直接通过 Vue.js 响应式系统进行观察和更改的对象,因此不能直接存储在 Pinia store 中。" 所以放弃 3.通过 inject/provide 方式,同理,发现

    const mapInstance = shallowRef(null) provide('map', mapInstance) 

    inject 获取到的永远是 undifined

    我不清楚是我哪里对这个 map 实例的理解出了问题,还请各位前端大佬指点一二,让我有个处理的方向

    7 replies    2023-09-03 16:08:35 +08:00
    op351
        1
    op351  
       Mar 16, 2023
    你说的打点是指用户点击地图上的某一个点吗?
    ktqFDx9m2Bvfq3y4
        2
    ktqFDx9m2Bvfq3y4  
       Mar 16, 2023
    你看你要使用 Angular 直接依赖注入,全局或基于页面 /组件共享实例都行。
    huoguo32
        3
    huoguo32  
    OP
       Mar 16, 2023
    嗯嗯是的,父组件生成地图实例,子组件提供个 div,让用户选择是打点,还是画线,然后通过 api 把点 /线显示到地图上,但根据高德的 api,这些方法里都需要用到父组件生成的 map,所以就想怎么把 map 传过去

    @op351
    huoguo32
        4
    huoguo32  
    OP
       Mar 16, 2023
    @Chad0000 谢谢大佬,不过 Angular 不是个框架吗?我是 vue3...
    op351
        5
    op351  
       Mar 16, 2023
    打点还是画线是个下拉框是吧?
    那直接把 option 的 click 事件结果传回父组件不就行了。
    不用把地图传过来再传回去。
    huoguo32
        6
    huoguo32  
    OP
       Mar 16, 2023
    @op351 啊大佬说的确实有道理啊,是我当局者迷了,点醒我了,我在这折腾半天传 map 本来就搞错重点了啊
    daiguamm
        7
    daiguamm  
       Sep 3, 2023
    OP 有实现代码吗?我想参考参考,我也是一直纠结在修改存储 map 实例上,一直报错
    About     Help     Advertise     Blog     API     FAQ     Solana     3282 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 11:46 PVG 19:46 LAX 04:46 JFK 07:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86