首页 > 其他分享 >vue+谷歌地图Google Map的使用(四)

vue+谷歌地图Google Map的使用(四)

时间:2024-09-24 22:55:02浏览次数:3  
标签:Map vue 文件 地图 js JS Google 页面 加载

前言

本篇文章,主要是为了解决文章一内容的实现在实际项目中造成的性能BUG


一、文章一在实际项目运用时的问题

文章中,主要是讲了如何在项目中引入谷歌地图的库,并在相应组件的DIV中展示出来。但是,要注意~其中的例子只是一个简单的vue DEMO效果,并不涉及多个组件,所以在当时,是将js文件放置在index.html文件中引入的。要知道,对vue来说index.html是一个总的入口文件,而vue又是单页面应用,挂在id为app的div下然后动态渲染路由模板,这就造成在实际项目中:每次页面的加载都会去加载这个js文件,从而让整个项目的页面加载都显得很是缓慢
而如果,整个项目中~你又添加了过场动画,那就会使得整个项目在运行时,页面始终被加载动画遮罩,而看到实际的业务界面

二、解决问题的思路与方案(踩坑之路)

1,最开始的思路是,按需加载,只有使用地图的这个组件在加载时,再去加载地图资源。
但在实际实现时,发现google始终在报错,无论是import引入,还是外部JS引入,走到加载地图时,控制台直接抛错,所以放弃了此方案(这是最深的坑,后续会解疑)

2,在发现无论如何无法按需引入,就考虑在index.html做文章,看是否可以获取相应路由,根据路由去判断是否加载JS文件。事实证明,这个也行不通,无法在index.html文件实时获取路由,因此~放弃

3,接着考虑在组件内写个方法,通过axios去发送接口,然后依据回参的状态码~来决定是否展示地图,事实证明,行不通,axios无法发通交易,pass

4,尝试下载整个js文件,将其放置在静态资源内,在通过import引入.事实证明~还是不行,加载在这个js文件时,会报错,pass

5,综上之后,重新捋思路:既然页面加载慢,是因为谷歌的JS文件加载慢,那就在index.html文件中将其放置在最后再执行,也就是利用defer属性,等其他文件、页面渲染完毕,再加载谷歌地图文件。这样虽然没有解决每个页面都要加载谷歌JS的问题,但对用户而言,页面是正常渲染的,而谷歌JS即使未加载,也不耽误用户看到正常业务界面。
但在实操时发现,虽然利用defer让页面渲染完毕再加载谷歌JS,但项目全局还有个动画loading,是根据接口是否开始、结束来显隐的(泪奔 ~~o(>_<)o ~~),也就是说,即使放在最执行谷歌JS,但因为此接口未结束,就算其他页面渲染、加载完毕,最上方依旧有loading动画遮罩,最终此方案pass

6,自此,脑袋已经蒙了蓦然发现,思路1,是可以的,之所以加载时报错,是因为未翻墙,JS就是没加载处理,不报错就怪了

三、实际代码示例

代码范例:

<template>
  <div id="google-map" style="width: 100%; height: 400px;"></div>
</template>
 
<script>
export default {
  name: 'GoogleMapComponent',
  mounted() {
    this.loadGoogleMap();
  },
  methods: {
    loadGoogleMap() {
      const script = document.createElement('script');
      script.src = 'https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap';
      script.async = true;
      document.head.appendChild(script);
 
      // 初始化地图的回调函数
      window.initMap = () => {
        const map = new google.maps.Map(document.getElementById('google-map'), {
          center: { lat: -34.397, lng: 150.644 },
          zoom: 8
        });
      };
    }
  }
};
</script>

在这里,还有个优化点:上面的方案会导致每点击一次地图弹窗,就会append一个js,因此实际可以 通过catch方法,去优化

总结

回过头再回顾自己的思路历程,会发现:在解决问题时,一定要注意细节,不然真的会事倍功半的

标签:Map,vue,文件,地图,js,JS,Google,页面,加载
From: https://blog.csdn.net/weixin_44760633/article/details/142500411

相关文章

  • vue3开发中易遗漏的常见知识点
    组件样式的特性ScopedCSS之局部样式的泄露示例(vue3):父组件:<template><h4>AppTitle</h4><hello-world></hello-world></template><script>importHelloWorldfrom'./HelloWorld.vue';exportdefault{name:'App......
  • Map and Set
    MapandSet1.搜索树1.1概念二叉搜索树又称二叉排序树,他或者是一颗空树,或者是具有一下性质的二叉树若它的左子树不为空则左子树上所有节点都小于根节点的值若它的右子树不为空则右子树上所有节点都大于根节点的值他的左右子树也分别是二叉搜索树//创建一个二叉搜索......
  • vue自定义指令实现打字效果
    实现如通义灵码官网关于代码片段中,当鼠标hover上代码上时,出现打字效果,示例地址:https://tongyi.aliyun.com/lingma?spm=5176.28508143.J_ahRFo5CaAe_asSOaCgS4J.14.5421154auHz4xJ&scm=20140722.M_185502201.P_131.MO_2276-ID_10360025-MID_10360025-CID_31292-ST_10352-V_1通过vu......
  • MapStruct 超神进阶用法,让你的代码效率提升十倍!
     MapStruct是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。expression在转化的时候,执行java表达式,直接看例子:@Mapper(componentModel="spring")public......
  • MapStruct 超神进阶用法,让你的代码效率提升十倍!
     MapStruct是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。expression在转化的时候,执行java表达式,直接看例子:@Mapper(componentModel="spring")public......
  • Vue.config.js中配置Proxy代理HTTPS
    Vue.config.js中配置Proxy代理HTTPS基本概念与作用为什么要使用HTTPS代理?示例一:基础HTTPS代理配置示例二:多环境代理配置示例三:忽略某些路径示例四:支持WebSocket代理示例五:高级配置实际开发中的使用技巧在开发基于Vue.js的应用时,经常会遇到前后端分离的情况,即前端应......
  • Vue修改全局样式 v-style指令详解
    Vue修改全局样式v-style指令详解基本概念与作用基础用法示例一:动态修改单个元素的样式示例二:使用计算属性动态设置样式示例三:全局样式动态化示例四:使用Vue生命周期钩子设置样式示例五:通过Vuex管理全局样式实际开发中的使用技巧在Vue.js的开发过程中,有时我们......
  • Vue2+3基础
    。第一个Vue程序使用script进行Vue全局设置: 指定Vue实例挂载的位置,Vue和js一样,都需要在script里写第一步创建vue实例1.为什么要newvue(),直接调用Vue不行吗?不行,因为如果直接调用Vue()会报如下错误: 2.关于vue构造函数:optionsoptions翻译为多个选项Vue框架要求这......
  • 【开题报告】基于django+vue医院电子病历管理(论文+程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着医疗技术的飞速发展和医疗信息化建设的不断深入,医院电子病历管理系统已成为现代医疗体系中不可或缺的一部分。传统的纸质病历不仅存储......
  • 《 C++ 修炼全景指南:十二 》用红黑树加速你的代码!C++ Set 和 Map 容器从入门到精通
    摘要本文详细介绍了基于红黑树实现的Set和Map容器,包括其底层设计原理、插入和删除操作的实现细节、性能分析与优化策略,以及实际应用场景和未来发展方向。通过采用红黑树的数据结构,Set和Map容器能够高效地处理有序数据,保持O(logn)的时间复杂度,适用于各种数据存储......