解决vue中BMap未定义问题

原文链接: 点我

最近在项目中使用了百度地图来显示物流信息,实现方式有两种:

引用Vue Baidu Map
引用BMap
存在的问题:\color{red}{存在的问题:}存在的问题:;
使用BMap可以修改起始点和终点的图标,但是地图需要刷新页面才会显示。
针对以上问题,问题的实现如下所示:

Vue文件中的代码

<template>
	<div id="myMap"></div>
</template>
import qs from "qs";
export default {
  mounted() {
    this.getMap();
  },
  methods: {
    // 绘制地图
    getMap() {
      var map = new BMap.Map("myMap");
      map.enableScrollWheelZoom(true);
	 //注意:下面的坐标值换为自己的动态值即可,我就不多说了
      var start = new BMap.Point(this.startLng, this.startLat);
      var end = new BMap.Point(this.currentLng, this.currentLat);
      var p1 = new BMap.Point(this.currentLng, this.currentLat);
      //自定义图标
      var startIcon = new BMap.Icon(
        require("../../assets/images/point.png"),  //起点图片
        new BMap.Size(25, 25)
      );
      var currentIcon = new BMap.Icon(
        require("../../assets/images/car.png"),   //物流车图片
        new BMap.Size(25, 25)
      );
      var endIcon = new BMap.Icon(
        require("../../assets/images/point.png"),   //终点图片
        new BMap.Size(25, 25)
      );
      var driving = new BMap.DrivingRoute(map, {
        renderOptions: { map: map, autoViewport: true },
        onMarkersSet: function(routes) {
          //标注点完成回调
          map.clearOverlays(); //删除点
          var myStart = new BMap.Marker(start, { icon: startIcon });
          map.addOverlay(myStart);
          var myEnd = new BMap.Marker(end, { icon: endIcon });
          map.addOverlay(myEnd);
          var myP1 = new BMap.Marker(p1, { icon: currentIcon });
          map.addOverlay(myP1);
        }
      });
      driving.search(start, end, { waypoints: [p1] });
    },
};
</script>

  

  • 这样写之后浏览器会报BMap is undefined,解决方法如下:
  • 在项目根目录下建立Js文件(比如:map.js)
    export function MP(ak) {
    return new Promise(function (resolve, reject) {
      window.onload = function () {
        resolve(BMap)
      }
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.src = "http://api.map.baidu.com/api?v=2.0&ak="+ak+"&callback=init";
      script.onerror = reject;
      document.head.appendChild(script);
    })
    }
    

    在App.vue中

  • <script>
    import { MP } from ‘./map‘    //引入上面创建的map.js文件
    export default {
      name: ‘app‘,
      data(){
        return {
          ak: "这里是您的密钥",
        }
      },
      async mounted(){
          await MP(this.ak);
      }
    }
    </script>
    

      要使用的vue文件中

  • mounted() {
    // 解决BMap undefined
    this.$nextTick(() => {
      var timer = setTimeout(() => {
        this.getMap();
      }, 500);
    });
    },
    

    好啦,通过上面的代码刷新显示地图就解决啦,若大家有更好的方法欢迎分享在下面??????,期待中…

原文地址:https://www.cnblogs.com/myfate/p/11676900.html

时间: 2024-07-29 00:59:01

解决vue中BMap未定义问题的相关文章

C#调用百度地图API入门&amp;解决BMap未定义问题

本文主要是最近帮助好友研究JavaScript的百度地图API,同时显示到C# Winform界面.同时遇到了BMap未定义的错误(BMap is not defined)及解决方法.以前写过基于Android的百度地图,其实原理都差不多,希望文章对你有所帮助吧! 一. C#显示百度地图 使用C# Winform显示百度地图主要包括两个步骤: 1.调用百度地图API,通过申请的密钥AK访问JavaScript版本地图: 2.再在C#中webBrowser浏览器控件中访问JS文件,显示地图到窗口.

解决vue中无法取得methods方法中的return值

如果在vue的methods中去return出来一个值, 然后发现调用这个方法的时候, 并不能获取到, 得到的是undefined... 解决方法是使用callback回调函数. 举个栗子:   这个样子获取到的结果是undefined 正确写法: 原文地址:https://www.cnblogs.com/betty-niu/p/12027585.html

解决vue中对象属性改变视图不更新的问题

在使用VUE的过程中,会遇到这样一种情况, vue data 中的数据更新后,视图没有自动更新. 这个情况一般分为两种, 一种是数组的值改变,在改变数组的值的是时候使用索引值去更改某一项,这样视图不会实时更新 第二种情况是改变了对象的某一项,但是其他依赖这个数据的视图没更新 第一种情况是因为直接通过索引去改变数组,vue 对象监听不到他的变化 所以没有更新. ----解决方法  1. Vue.set(example1.items[0], { childMsg: 'Changed!'}) 2.使用

vue中采用axios发送post请求

这几天在使用vue中axios发送get请求的时候很顺手,但是在发送post请求的时候老是在成功的回调函数里边返回参数不存在,当时就纳闷了,经过查阅资料,终于得到了解决方案,在此做一总结: 首先我们在运用npm install axios的时候就会默认安装qs,因此我们就得将qs引入到axios中,然后需要再通过实例化一个新的axios,并且设置他的消息头为'content-type': 'application/x-www-form-urlencoded' 1 let qs = require

解决IE6 IE7 JSON.stringify JSON 未定义问题

在项目中引入json2.js 官方http://www.json.org/ 源码地址:https://github.com/douglascrockford/JSON-js $.ajax({ url: '/LicXXse/Add', contentType: "application/json; charset=utf-8", type: 'POST', data: JSON.stringify(PostData),//还是这样写即可 async: true, success: fun

css文件中的样式类被覆盖,js文件中的变量未定义问题问题

Extjs控件中css样式表中的样式类部分被莫名其妙的覆盖 问题原因: 为什么呢? 因为在调用组件W的css样式时,我们自己写了css样式A,Ext组件又自带css样式B,A是我们用cls:'A'放进去.那么这个W到底是用两个样式重复的哪一个种呢? 这就要看css样式表的引入顺序了,如果先引入自己写的,再引入Ext自带的,那么浏览器先读自己写的css样式,然后再读Ext自带的样式.结果我们的自己写的css样式就被覆盖了. 解决办法: 这样就对了. js文件中的变量未定义问题 问题描述: read

vue中解决时间在ios上显示NAN的问题

最近在用vue,遇到倒计时在ios上显示为NAN的问题. 因为做的是倒计时支付,思路是获取服务器时间和下单时间,再转成秒级时间戳做差值. 在网上找到说是ios 不支持例如2018-09-01 10:00:59这种"-"连接符. 网上的解决是: var data = '2018-09-01 12:00:00' var time= Date.parse(new Date(data )) 然后用正则匹配改一下,将-替换为/ var date = '2018-09-01 12:00:00' v

在vue中使用 layui框架中的form.render()无效解决办法

下面简单介绍在vue中使用 layui框架中的form.render()无效解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.php/archives/layuiForm.html 近期开发的项目中前端ui框架用的是Layui,数据渲染使用vue去渲染,当我用vue渲染表单控件的数据时,会出现控件被禁用的情况,例如:select下拉等,于是去看文档,按照文档说的写了,结果然并卵,( ̄▽ ̄)".搞了半天都没搞好.然后在百度搜索了v

vue中router-link的click事件失效的解决办法

title: vue中router-link的click事件失效的解决办法 toc: false date: 2018-12-04 16:28:49 categories: Web tags: vue 使用@click.native 问题原因: router-link会阻止click事件 .native指直接监听一个原生事件 原文地址:https://www.cnblogs.com/zmj97/p/10180674.html