类型
状态
日期
文章链接
概览
标签
分类
图标
密码
创建时间
Feb 10, 2023 06:19 PM
最近更新时间
Feb 10, 2023 06:54 PM
目前在公司目前开发的gis项目中大量页面需要用到3d地图,如果每个页面点开都初始化一遍地图实例,将会耗费大量的浏览器资源用在无意义的加载上,所以,迫切需要一个将地图组件能够单例化的方法。实现在任何地方使用地图组件,都只会直接使用加载好的,不需要重复加载。

想法一

此方法也是在多个类似项目中提出并完成实施的解决方案,通俗易懂的讲就是讲地图直接当成项目的背景使用。切换页面时,只切换加载组件即可。 此方法适合页面均为全地图且无其他背景的项目。 缺点:
  1. 切换路由得去判断当前需要显示的组件,较为麻烦。
  1. 对于只显示半个地图或者部分地图的页面无法适应。

想法二

借鉴类中的单例模式,将地图组件设计成单例,只在第一次加载时才会render。其他地方只需要引用即可。
很不幸,尝试了很久,才疏学浅,没有办法在现有的vue3暴露出的方法实现这样的操作。以后再试,要是能实施了,再回来补全。

想法三(目前方案)

也是在做想法二的尝试时想到的,可以利用Vue的 <teleport> 来实现哪里需要放哪里。而我们可以把地图组件放在App中加载,这样,只需要一次加载,即可在任何地方使用。话不多说,下面上代码。
首先,需要定义一个状态管理器,来设置和监听地图需要放置的地方
 
定义一个我们需要的地图容器,用来做中间组件插入地图使用
 
在App中使用地图组件,并将其放置到对应位置
 
最后在组件中使用地图
 
 
 
在NestJS中使用session实现登录验证设计一个程序,模拟红绿灯切换