Vue 腾讯地图异步加载

968 阅读1分钟

需求

腾讯地图js文件加载太慢,有时长达数十秒,传统的在index.html中引入的方式,会导致所有页面都等待js加载。体验极差。

解决

使用异步加载,在需要地图的模块进行懒加载。

核心代码如下:

  mounted() {
  //异步加载
	const mapScript = document.createElement('script')
    mapScript.type = 'text/javascript'
    mapScript.src = 'https://map.qq.com/api/gljs?v=1.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77'
    document.body.appendChild(mapScript)
    mapScript.onload = () => {
      console.log('mapScript 加载完毕')
      //加载完成后初始化地图
      this.initMap()
    }
  },
	methods: {
		initMap() {
			//定义地图中心点坐标
			var center = new TMap.LatLng(39.984120, 116.307484)
			//定义map变量,调用 TMap.Map() 构造函数创建地图
			var map = new TMap.Map('chartMap', {
				center: center,//设置地图中心点坐标
				zoom: 3.5,   //设置地图缩放级别
			});
		}
	},

完整可测试代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>腾讯地图异步加载</title>
<script src="//unpkg.com/vue/dist/vue.js"></script>

</head>
<body>
<div id="chartMap">
</div>
	
<script>
new Vue({
  el: '#app',
  data: {
	message: 'W3xue'
  },
  mounted() {
	const mapScript = document.createElement('script')
    mapScript.type = 'text/javascript'
    mapScript.src = 'https://map.qq.com/api/gljs?v=1.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77'
    document.body.appendChild(mapScript)
    mapScript.onload = () => {
      console.log('mapScript 加载完毕')
      this.initMap()
    }
  },
	methods: {
		initMap() {
			//定义地图中心点坐标
			var center = new TMap.LatLng(39.984120, 116.307484)
			//定义map变量,调用 TMap.Map() 构造函数创建地图
			var map = new TMap.Map('chartMap', {
				center: center,//设置地图中心点坐标
				zoom: 3.5,   //设置地图缩放级别
			});
		}
	},
	filters: {
    capitalize: function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    }
  }
})
</script>
</body>
</html>