在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet

摘要:
Element plus和vuex用于vue3组件中,以使用传单实现电子地图功能的本地html开发,该传单不依赖于脚手架来支持在浏览器中直接运行。带有vue扩展名的组件文件的样式支持scoped。集成了传单,以实现电子地图vue和jqeury的混合使用。当有许多文件时,会出现性能问题,表明组件的样式支持作用域。缺点是父组件中的样式可能应用于子组件中具有相同类的标签。
vue3-in-html

在html中使用vue3,不依赖nodejs和webpack,不依赖脚手架

demo源码

https://gitee.com/s0611163/vue3-in-html

功能

  1. 编写了几个简单的组件,使用了element-plus和vuex
  2. 在vue3组件中使用leaflet实现电子地图

特色

  1. 原生 html 开发,不依赖 nodejs 和 webpack,不依赖脚手架
  2. 支持在浏览器中直接运行.vue扩展名的组件文件
  3. style 支持 scoped
  4. 集成了 leaflet 实现电子地图
  5. vue 和 jqeury 混合使用,方便以较小的修改量引入旧代码

代码分支

1. master 分支

主分支,该分支采用异步的方式加载vue文件

2. sync 分支

该分支采用同步的方式加载vue文件,文件较多时存在性能问题

说明

  1. 组件style支持scoped,但实现原理和vue的scoped不同,缺陷是父组件中的样式可能会应用到子组件中具有相同class的标签上,
    出现这种情况时要为子组件受影响的css属性在class中设置一下该属性的值

  2. 支持.vue扩展名的文件,从而使编写的vue模板代码在vscode中具有语法检查

  3. 谷歌浏览器可以打开,火狐浏览器未测试,不支持IE浏览器

  4. 电子地图代码是我从 https://gitee.com/s0611163/leaflet-demo 复制过来的,代码本身与vue没有瓜葛,额外写了一个组件MapPage用来引入电子地图功能,
    使用这种方式不需要把地图相关代码直接写在vue的组件中

关于 controlButtons.js 和 switchMapControl.js

这两个电子地图相关的组件并没有使用 Vue.defineComponent 定义,而是使用 Vue.createApp 的方式定义的,是为了测试不同的实现方式;
controlButtons 直接使用 jquery 实现,并混合了 vue;

思考

  1. 为了解决vue文件加载性能问题,采用了异步函数,由于 async await 的传染性,导致使用defineComponent定义组件时,template必须异步获取,
    导致无法通过import导入定义的组件,必须定义异步函数创建组件,使用defineComponent定义父组件时,子组件必须异步获取

  2. async await 的使用,使得代码简捷清晰,优雅地实现了vue文件的并行请求

注意

  1. 对 iclient-leaflet.js 的引用要放在 proj4leaflet.js 的前面,否则 iclient-leaflet.js 会重写 proj4leaflet.js 中的 L.CRS 的 scale 方法,
    从而使百度地图无法正确加载瓦片;当使用 leaflet 加载百度地图,引用了 iclient-leaflet.js 并且图源不是超图提供时,可能会引发此问题

代码结构

在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet第1张

demo效果图

在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet第2张

免责声明:文章转载自《在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Makefile所有内嵌函数C# DiagnosticSource and DiagnosticListener下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EC20模块(mdm9607)复用pin脚当作普通gpio的设置方法

修改pin37~40,当作普通gpio的方法如下:   下面代码截图需要确认是否一样,如不一样请修改:   修改pin41~42 ,当作普通gpio方法如下:   Pin24~27,当作普通gpio方法如下:         Pin136不建议修改。 Pin136的用法,请参考以下文件/etc/init.d/wlan:  ...

Gradle 源配置

gradle-wrapper.properties distributionBase=PROJECT distributionPath=.gradle/dists zipStoreBase=PROJECT zipStorePath=.gradle/dists distributionUrl=https://services.gradle.org/distr...

2/3 初次搭建 Vue 项目遇到的问题汇总

  今天步子扯开的有点大   初步看了一下 Vue-router 然后就开始用脚手架 Vue-cli 来搭建第一个项目了   遇到的问题确实很多,还有一些疑问,自己查资料都大致解决了一部分   ( 推荐还是理解了一部分的有缘人 进行阅读理解 如果有错 请大家指正 )   按照流水账来说一下 首先是 Vue-router    这里先简单谈一下,我的理解  ...

vue 弹框

弹框展示: 代码: 1 <template> 2 <div> 3 <el-col :span="9" style="text-align: right;"> 4 <el-button @click="dialogVisible=true" 5...

Linux CA

CA(Certificate Authority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。 1.什么是CA认证? CA认证,即CA认证机构,为电子签名相关各方提供真实性、可靠性验证的行为。 2.什么...

vscode如何配置ts的lint,如何配置才能让eslint和prettier不冲突一键格式化代码(vue开发使用)

最近在使用ts,发觉tslint在vscode上使用很不方便,不如eslint一键格式化高效,就想着能不能配置下vscode让其像写js一样爽 这篇文章主要解决2个问题,第一个是如何让vscode使用ts的lint,第二个是如何配置才能让eslint和prettier这2个代码格式化的vscode插件不互相冲突 vscode使用ts的lint 首先ts的l...