vue-某个特定页面异步加载高德地图的方式

1 高德官网相关知识点:

高德官网给出的异步加载的方式说明:https://lbs.amap.com/api/javascript-api/guide/abc/load

demo:https://lbs.amap.com/fn/jsdemo_loader/?url=http%3A%2F%2Fwebapi.amap.com%2Fdemos%2Fload%2Fload2.html

js使用方式:

<script type="text/javascript">
    window.init = function(){
        var map = new AMap.Map('container', {
           center:[117.000923,36.675807],
           zoom:11
        });
    }
</script>
<script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&callback=init"></script>

2 在某一页面,比如multipleMain.vue中引入高德地图的业务逻辑:

vue的页面结构是<template>   <script>     <style>,我们该如何按照上面的逻辑引入高德地图呢?

  • 1、把引入高德地图的功能放在created()中去实现
  • 2、把高德js加载完成的回调方法initMap()【实现地图的初始化】写在前面
  • 3、把js引入到body中,也可以引入到head中

注意:每次进multipleMain.vue时都会引入js,如果不加限制会加载多个js,写个方法isLoadMapJS()用来判断是否已经加载了js,如果已经加载了,不需要重复加载,没加载再进行加载

3 实现方式如下:

  • 1、created()中的异步加载高德地图的逻辑:
created(){
  // 1 异步加载地图的次数
  let _count=this.isLoadMapJS();
  // 2 没有加载高德在线js
  if(_count==0){
    // 2.1 高德js加载完成的回调-初始化地图
    window.onLoad=()=>{
      this.initMap()
    };
    // 2.2 把js引入到body中,引入到head中也可以
    var script=document.createElement("script"); 
    script.setAttribute("type", "text/javascript"); 
    script.setAttribute("src", "https://webapi.amap.com/maps?v=1.4.15&key=e64fe5fe747de3b6897932dfbdb340d4&callback=onLoad"); 
    var body = document.getElementsByTagName("body"); 
    if(body.length) {
      body[0].appendChild(script); 
    }else {
      document.documentElement.appendChild(script);  
    }
  }else{
    // 3 已经加载过,直接初始化地图即可,不需要再次引入js
    setTimeout(()=>{
      this.initMap();
    }, 500);
  }  
},
  • 2、判断加载次数的方法
// 判断是否加载了mapjs
isLoadMapJS(){
  let count=0;
  var scriptsArr = document.getElementsByTagName("script"); 
  for(let i=0;i<scriptsArr.length;i++){
    let one=scriptsArr[i];
    if(one.src.indexOf("https://webapi.amap.com/maps")>-1){
      count+=1
    }
  }
  return count;
},
  • 3、初始化地图
// map.1 初始化地图
initMap(){
  console.log("AMap===",AMap);
  if(AMap){
    map = new AMap.Map('container', {
      resizeEnable: true, //是否监控地图容器尺寸变化
      center:this.strToLngLat(this.location.startLocation), 
      zoom:10, //初始化地图层级
    });
    map.on("complete", function(res){
      console.log("res===",res);  
      console.log("地图加载完成!");  
    });
  }else{
    Toast("当前网络有问题,请稍后再试!");
  }
},

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛佛ง

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值