vue3+ts+echarts,实现按需引入和类型界定
本人水平实在有限,本文如果有错误的地方欢迎讨论
一直想系统学习一下echarts,无奈今天在引入上就犯了难,现记录一下我的解决方案
为了减少体积和使用的便利,我想实现一个按需和全局的引入
本来是想在main.ts当中直接import * as echarts from 'echarts',然后把这个echarts挂载在app的实例上,但是以我现有的经验,这可能要涉及到this的问题,vue3已经极力避免this的出现,所以在看了相关大神的文章之后,我决定在App.vue的界面进行引入,然后利用provide函数,将形成的echarts变量传递给其他的子页面,这样就能实现全局使用的问题
-
//App.vue
-
import{provide} from 'vue'
-
import * as echarts from 'echarts'
-
provide("echarts",echarts)
-
-
//其他子页面中
-
import {inject} from 'vue'
-
let echarts=inject<any>("echarts")
第二个问题是关于按需的问题,这里我直接贴上官方的写法,简单看看就行
-
import * as echarts from 'echarts/core';
-
import {
-
BarChart,
-
// 系列类型的定义后缀都为 SeriesOption
-
BarSeriesOption,
-
LineChart,
-
LineSeriesOption
-
} from 'echarts/charts';
-
import {
-
TitleComponent,
-
// 组件类型的定义后缀都为 ComponentOption
-
TitleComponentOption,
-
TooltipComponent,
-
TooltipComponentOption,
-
GridComponent,
-
GridComponentOption,
-
// 数据集组件
-
DatasetComponent,
-
DatasetComponentOption,
-
// 内置数据转换器组件 (filter, sort)
-
TransformComponent
-
} from 'echarts/components';
-
import { LabelLayout, UniversalTransition } from 'echarts/features';
-
import { CanvasRenderer } from 'echarts/renderers';
-
-
// 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
-
type ECOption = echarts.ComposeOption<
-
| BarSeriesOption
-
| LineSeriesOption
-
| TitleComponentOption
-
| TooltipComponentOption
-
| GridComponentOption
-
| DatasetComponentOption
-
>;
-
-
// 注册必须的组件
-
echarts.use([
-
TitleComponent,
-
TooltipComponent,
-
GridComponent,
-
DatasetComponent,
-
TransformComponent,
-
BarChart,
-
LabelLayout,
-
UniversalTransition,
-
CanvasRenderer
-
]);
-
-
const option: ECOption = {
-
// ...
-
};
以上很明显引入了一些bar图和line图,并且引入以option为结尾的组件类型,此外还引入了一些title基础组件和对应类型,并利用use的方法将其与核心的echarts对象进行整合,还规制了一个ECOption作为echarts配置对象的类型,这确实实现了按需引入,但是问题是按照我上面的写法,provide不能传递type,所以我需要将类型和echarts分开写到两个文件里。
首先看一下App.vue的文件中我是怎么按需配置echarts的
-
//App.vue文件
-
// 我本来想在这里引入echart
-
import { provide } from 'vue';
-
import * as echarts from 'echarts/core';
-
import {
-
BarChart,
-
// 系列类型的定义后缀都为 SeriesOption
-
LineChart
-
} from 'echarts/charts';
-
import {
-
TitleComponent,
-
// 组件类型的定义后缀都为 ComponentOption
-
TooltipComponent,
-
GridComponent,
-
// 数据集组件
-
DatasetComponent,
-
// 内置数据转换器组件 (filter, sort)
-
TransformComponent
-
} from 'echarts/components';
-
import { LabelLayout, UniversalTransition } from 'echarts/features';
-
import { CanvasRenderer } from 'echarts/renderers';
-
-
// 注册必须的组件
-
echarts.use([
-
TitleComponent,
-
TooltipComponent,
-
GridComponent,
-
DatasetComponent,
-
TransformComponent,
-
BarChart,
-
LineChart,
-
LabelLayout,
-
UniversalTransition,
-
CanvasRenderer
-
]);
-
-
// 把这个配置好的echartprovide出去
-
provide("echarts", echarts)
-
// 把这个option的选项类型也provide出去,但是provide方法无法使用传递类型,那我这边只能放弃
其实就是把全部的类型都摘了出来,然后单独写到一个echart.d.ts的申明文件中去,以下是代码
-
//echart.d.ts
-
// 因为provide不能传递type的原因,我们将echart的option类型单独抽取出来写一个申明文件
-
// 1.我们引入了线图和bar图,所以这里我们引入了两者的类型
-
import { ComposeOption } from 'echarts/core';
-
import {
-
BarSeriesOption,
-
LineSeriesOption
-
} from 'echarts/charts';
-
//2.引入组件,也就是option选项中的类型
-
import {
-
// 组件类型的定义后缀都为 ComponentOption
-
TitleComponentOption,
-
TooltipComponentOption,
-
GridComponentOption,
-
// 数据集组件
-
DatasetComponentOption,
-
} from 'echarts/components';
-
-
// 3.通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
-
type ECOption = ComposeOption<
-
| BarSeriesOption
-
| LineSeriesOption
-
| TitleComponentOption
-
| TooltipComponentOption
-
| GridComponentOption
-
| DatasetComponentOption
-
>;
-
// 4.将这个类型暴露出去
-
export { ECOption }
然后是具体使用的代码
-
-
import { inject, onMounted } from 'vue';
-
// 引入我自定义的图像option类型
-
import { ECOption } from '../echart'
-
let echarts = inject<any>("echarts")
-
// 将echart的创建,压缩成一个方程
-
let echartInit = () => {
-
// 将option选项抽离出来
-
let option: ECOption = {
-
title: {
-
text: 'ECharts 入门示例'
-
},
-
tooltip: {},
-
xAxis: {
-
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
-
},
-
yAxis: {},
-
series: [
-
{
-
name: '销量',
-
type: 'bar',
-
data: [5, 20, 36, 10, 10, 20]
-
}
-
]
-
}
-
-
// echart图标的绘制
-
var myChart = echarts.init(document.getElementById('chart'));
-
myChart.setOption(option);
-
}
-
onMounted(() => {
-
echartInit()
-
})
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgghiig
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13