vue一个页面如何显示多个地图?

发布于 2022-09-11 20:10:40 字数 1952 浏览 12 评论 0

clipboard.png

为了方便,我把地图封装成一个组件,这是父级代码

<position :DOM="`map${index}`"></position> //传过去的map1,map2,map3以此类推

子组件代码:

<template>
    <div>
        <div :id="DOM" class="container"></div>
    </div>
</template>
let map = "";
let posi = [116.397428, 39.90923];
let DOM = "";
let loadMap = function(){
    //加载地图
    let params = {
        zoom: 14,
        center:posi
    }
    map = new AMap.Map(DOM, params);
    //标记
    var marker = new AMap.Marker({
        position:posi  //位置
    });
    map.add(marker);
}
window.map_callback = () => {
    loadMap()
}
export default {
    props:["DOM"],
    data(){
        return {
            key:'',
        }
    },
    watch:{
        DOM:function(){
            DOM = this.DOM;
            this.initAmap();
        }
    },
    methods: {
        //初始化地图
        initAmap(){
            var scriptUrl = `https://webapi.amap.com/maps?v=1.4.13&key=${this.key}&callback=map_callback`
            var scriptID = 'map_amp_ID'
            if(window.scriptID){
                window.map_callback()
                console.log('已加载成功')
                return
            }
            var script = document.createElement('script')
            script.id = scriptID
            script.src = scriptUrl

            var amapUIJs = document.createElement('script')
            //amapUIJs.src = 'https://webapi.amap.com/ui/1.0/main-async.js'

            document.body.appendChild(script)
            document.body.appendChild(amapUIJs)
        },
    },
    created(){
        this.key = AMAPKEY; //地图key值
        DOM = this.DOM; //父组件传过来的唯一值
        console.log("this.DOM:" + this.DOM);
        console.log("DOM:" + DOM);
    },
    mounted(){
        this.initAmap();
    },
}
</script>

浏览器也没报错,为啥就显示一个地图呀?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧话新听 2022-09-18 20:10:40

是不是因为id重复了

瞳孔里扚悲伤 2022-09-18 20:10:40

js 开始部分缺少 <script> (PS:这应该是贴代码不小心导致的

你可以将export default 上方的js代码全部放入vue内 加载多个也许会影响 而且代码写在上面太乱了.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文