vue3+ts打开echarts的正确方式

实例项目使用 vite5 + vue3 + ts,项目地址 vite-vue3-charts,预览地址 https://weizwz.com/vite-vue3-charts

准备工作

1. 注册为百度地图开发者

官网地址,然后在 应用管理 -> 我的应用 里,创建应用,创建好后复制 AK

image

2. 在根目录的 index.html 里引入百度地图

<head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>xxx</title><script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=你复制好的AK"></script>
</head>

在 head 里引入,是为了提前加载进来

3. 安装 echarts

npm i echarts -S

封装

1. 增加ts对百度地图的支持

修改 .eslintrc.cjs,加入对百度地图的支持

module.exports = {// 其他省略globals: {BMap: true}
}

2. 全局注册 echarts

修改 main.ts

// 引入 echarts
import * as echarts from 'echarts'
import themeJSON from '@/assets/weizwz.json'
echarts.registerTheme('weizwz', themeJSON)const app = createApp(App)
// 全局挂载 echarts
app.config.globalProperties.$echarts = echarts

3. 封装 echarts

src/components 下新建 chart 文件夹,并在其下新建 index.vue,封装如下

<script setup lang="ts">
import { onMounted, getCurrentInstance, defineExpose, ref } from 'vue'defineOptions({name: 'WChart'
})
// defineExpose 让父组件可调用此方法
defineExpose({setData
})// 组件传参
const props = defineProps({width: {type: String, //参数类型default: '100%', //默认值required: false //是否必须传递},height: {type: String,default: '10rem',required: true},option: {type: Object,default: () => {return {}},required: true},// 初始化之前的工作,比如加载百度地图相关数据initBefore: {type: Function,required: false},// 初始化之后的工作,比如添加百度地址控件initAfter: {type: Function,required: false}
})let chart: { setOption: (arg0: Record<string, any>) => void; resize: () => void }
const wchart = ref(null)//声明周期函数,自动执行初始化
onMounted(() => {init()// 监控窗口大小,自动适应界面window.addEventListener('resize', resize, false)
})//初始化函数
function init() {// 基于准备好的dom,初始化echarts实例const dom = wchart.value// 通过 internalInstance.appContext.config.globalProperties 获取全局属性或方法let internalInstance = getCurrentInstance()let echarts = internalInstance?.appContext.config.globalProperties.$echartschart = echarts.init(dom, 'weizwz')// 渲染图表if (props.initBefore) {props.initBefore(chart).then((data: Record<string, any>) => {setData(data)if (props.initAfter) props.initAfter(chart)})} else {chart.setOption(props.option)if (props.initAfter) props.initAfter(chart)}
}function resize() {chart.resize()
}
// 父组件可调用,设置动态数据
function setData(option: Record<string, any>) {chart.setOption(option)
}
</script><template><div ref="wchart" :style="`width: ${props.width} ; height: ${props.height}`" />
</template><style lang="scss" scoped></style>

使用

1. 使用 echarts 普通图表

示例:使用玫瑰环形图

<script setup lang="ts">
import WChart from '@comp/chart/index.vue'defineOptions({name: 'ChartLoop'
})
// 正常 echarts 参数
const option = {grid: {top: '20',left: '10',right: '10',bottom: '20',containLabel: true},series: [{name: '人口统计',type: 'pie',radius: [50, 120],center: ['50%', '50%'],roseType: 'area',itemStyle: {borderRadius: 8},label: {formatter: '{b}\n{c} 万人'},data: [{ value: 2189.31, name: '北京' },{ value: 1299.59, name: '西安' },{ value: 1004.79, name: '长沙' }]}]
}
</script><template><WChart width="100%" height="300px" :option="option" />
</template><style lang="scss" scoped></style>

image

2. 结合百度地图

示例:西安热力图

<script setup lang="ts">
import { reactive } from 'vue'
import WChart from '@comp/chart/index.vue'
// 注意需要引入 bmap,即 echarts 对百度地图的支持扩展
import 'echarts/extension/bmap/bmap'
// 热力数据,内容如:{ features: [ { geometry: { coordinates: [ [ [x, y] ] ] } } ]}
// 为什么这么复杂,因为是我从阿里地理数据下载的,地址 https://datav.aliyun.com/portal/school/atlas/area_selector
import xianJson from '@/assets/xian.json'defineOptions({name: 'ChartMap'
})const option = {animation: false,backgroundColor: 'transparent',bmap: {// 地图中心点center: [108.93957150268, 34.21690396762],zoom: 12,roam: true},visualMap: {show: false,top: 'top',min: 0,max: 5,seriesIndex: 0,calculable: true,inRange: {color: ['blue', 'blue', 'green', 'yellow', 'red']}},series: [{type: 'heatmap',coordinateSystem: 'bmap',data: reactive([] as any[]),pointSize: 5,blurSize: 6}]
}const initBefore = () => {return new Promise((resolve) => {// 处理数据const arr = []for (const item of xianJson.features) {const positions = item.geometry.coordinates[0][0]for (const temp of positions) {const position = temp.concat(Math.random() * 1000 + 200)arr.push(position)}}option.series[0].data = arrresolve(option)})
}const initAfter = (chart: {getModel: () => {(): anynew (): anygetComponent: { (arg0: string): { (): any; new (): any; getBMap: { (): any; new (): any } }; new (): any }}
}) => {// 添加百度地图插件var bmap = chart.getModel().getComponent('bmap').getBMap()// 百度地图样式,需要自己去创建bmap.setMapStyleV2({styleId: 'bc05830a75e51be40a38ffc9220613bb'})// bmap.addControl(new BMap.MapTypeControl())
}
</script><template><WChart width="100%" height="500px" :option="option" :initBefore="initBefore" :initAfter="initAfter" />
</template><style lang="scss" scoped></style>

image

文章转载自:唯之为之

原文链接:https://www.cnblogs.com/weizwz/p/17933635.html

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661718.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

线上发布稳定性方案介绍

目录 一、方案说明 二、线上发布问题描述 2.1 无损上下线背景说明 2.1.1 服务⽆法及时下线 2.1.2 初始化慢 2.1.3 注册太早 2.1.4 发布态与运⾏态未对⻬ 三、问题解决方案 3.1 无损下线方案 3.1.1 什么是无损下线 3.1.2 传统解决方式 3.1.3 云原生场景解决方案 3.1…

Net6 Core webApi发布到IIS

Net6 Core Api发布到IIS不同于webapi&#xff0c;依赖框架不同&#xff0c;配置也移至项目内Program.cs 一、发布到指定文件夹和IIS&#xff0c;不过注意IIS应用程序池选择的是 “无托管代码“ 在IIS管理器中点击浏览&#xff0c;访问接口路径报500.19&#xff0c;原因是所依赖…

HALCON报错#2021:System clock has been set back 解决方案

如果操作系统修改过时间&#xff0c;再更新到正常的时间后&#xff0c;打开halcon可能会报错#2021&#xff1a;System clock has been set back. 解决方案&#xff1a; 1、联网同步Windows 系统时间。 2、检查以下目录中是否有超过当前时间的文件&#xff08;删除&#xff09…

o2o生活通全开源尊享版+多城市切换+企业付款+交友IM+平台快报

搭建教程 1.把 pigo2ov282.sql 文件里面的网址 test.souho.net 全部批量替换为你的自己的 2.使用 phpmyadmin 导入 pigo2ov282.sql 到你的数据库&#xff08;直接访问/phpmyadmin 即可&#xff09; 3.修改数据库文件/conf/db.php 里的数据库连接信息&#xff08;请勿使用记事本…

最新最全智能科学与技术专业毕业设计选题精华汇总-持续更新中

文章目录 0 简介1 如何选题2 最新智能科学与技术毕设选题3 最后 0 简介 Hi&#xff0c;大家好&#xff0c;随着毕业季的临近&#xff0c;许多同学开始向学长咨询关于选题和开题的问题。在这里&#xff0c;学长分享一些关于智能科学与技术专业毕业设计选题的内容。 以下为学长…

反转链表、链表的中间结点、合并两个有序链表(leetcode 一题多解)

一、反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路一&#xff1a;翻转单链表指针方向 这里解释一下三个指针的作用&#xff1a; n1&#xff1…

Emu2:37B参数开创多模态生成新篇章

引言 多模态任务在人工智能领域一直是极具挑战性的「技术高地」。智源研究院最近开源发布的新一代多模态基础模型Emu2&#xff0c;在这一领域取得了突破性进展。Emu2以其庞大的37B 参数规模和强大的多模态生成能力&#xff0c;为AI的多模态理解和生成开启了新的篇章。 模型概…

Python基础进阶:9个易错知识点

你好&#xff0c;我是kelly。 kelly根据自己平时工作&#xff0c;总结9个易错知识点&#xff0c;希望对大家有用。 知识点1&#xff1a;is 和 is比较是两个变量地址是否相同&#xff0c;比较是两个变量的值&#xff08;内容&#xff09;是否相同。 示例&#xff1a; In [92…

全方面了解vcruntime140_1.dll的解决方法,多种vcruntime140_1.dll丢失的方法

在日常使用电脑时&#xff0c;我们常常遇到各种各样的问题。其中之一就是丢失vcruntime140_1.dll文件&#xff0c;这是一个重要的系统文件&#xff0c;会影响到电脑的正常运行。今天小编就来给大家详细的说说这一方面的咨询&#xff0c;教会大家多种的丢失vcruntime140_1.dll的…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《适应储能参与的调频辅助服务市场机制设计及调度策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到储能技术在电力系统中参与调频辅助服务市场的机制设计和调度策略。下面对标题中的关键术语进行解读&#xff1a; 储能参与的调频辅助服务&am…

Cocos3D项目中fbx模型转gITF模型和glb模型

1.npm安装&#xff1a;先按照npm哈 npm install --save fbx2gltf -g 2. 到指定目录 cd C:\Program Files\nodejs\node_global\node_modules\fbx2gltf\bin\Windows_NT cmd命令行界面进入node_modules\fbx2gltf文件下的bin文件&#xff0c;然后根据平台选择进入相应目录&#…

元旦快到了,分享一些元旦祝福模板

元旦-王安石 爆竹声中一岁除&#xff0c;春风送暖入屠苏。 千门万户曈曈日&#xff0c;总把新桃换旧符。 元旦其实也是中国的传统节日了&#xff0c;不过元旦是由中国的春节演化而来的。传统的元旦时间是正月初一&#xff0c;从王安石的诗也能看的出来&#xff0c;其实描述的…

四川思维跳动商务信息咨询有限公司抖店开店可信吗

在当今的电商时代&#xff0c;越来越多的人选择在抖音平台上开设店铺&#xff0c;实现自己的创业梦想。然而&#xff0c;对于许多新手来说&#xff0c;如何顺利地在抖音上开店成为了他们面临的一大难题。四川思维跳动商务信息咨询有限公司作为一家专业的抖店咨询服务提供商&…

基于elemen二次封装弹窗组件

效果&#xff1a; 一、自定义内容类型弹窗 <!-- title&#xff1a;对话框的标题confirmLoading&#xff1a;当前是否处于提交中titleCenter&#xff1a;对话框标题居中方式footerCenter&#xff1a;底部按钮的对其方式visible&#xff1a;是否显示弹窗width&#xff1a;设置…

web自动化上传文件

1&#xff0c;web 自动化文件上传不要太简单 熟悉 web 自动化测试的大佬应该都懂&#xff0c;当采用 js 调用原生控件进行文件上传的时候&#xff0c;最常用的是使用 pywin32 等系统交互库。 当看到 pywin32 那丑陋的 api 封装只能爆粗口。就为了输入一个文件地址&#xff0c;…

MySQL HeatWave Lakehouse

在今年的Oracle Cloud World,Oracle宣布将发布一款数据库湖仓产品——MySQL HeatWave Lakehouse用以解决存储在数据库之外的文件数据等非结构化数据的查询和处理。 MySQL HeatWave是一个完全管理的数据库服务,将事务处理、分析处理和机器学习服务合并到一个MySQL数据库的云服务…

Linux中账号和权限管理

目录 一.用户账号和组账号&#xff1a; 1.用户账号类型&#xff1a; 2.组账号类型&#xff1a; 3.系统区别用户的方法 &#xff1a; 4.用户账号文件&#xff1a; 二.Linux中账户相关命令&#xff1a; 1.useradd&#xff1a; 2.passwd&#xff1a; 3.usermod&#xff1a…

Python爬取今日头条热门文章

前言 今日头条文章收益是没有任何门槛&#xff0c;只要是你发布文章&#xff0c;每篇文章的阅读量超过1000就能有收益&#xff0c;阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫&#xff0c;爬取热门文章&#xff0c;然后完成自动化发布文章呢&#xf…

24年软件测试的晋升之路与能力要求,“我“该何去何从?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试人员的…

1.DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言&#xff0c;最重要的语句 4.使用频率最高的语句 语法&#xff1a; SELECT 字段1&#xff0c;字段2&#xff0c;……FROM 表 有时候…