组件库文档 tmui.design
图表 Chart 3.0.89开始全端支持
百度图表,3.0.89开始已经兼容nvue平台,当前nvue平台为最新的5.4.3版本且是全量包。非nvue平台是5.3.2版本,包大小为精简包,具体见下方。
高效精简
默认是全包引入,大概是500kb左右吧。具体我也没测算。
如果你只是想使用某部分图表功能,需要精简的话,可以见百度文档
具体可以看下我组件目录tmui->components->tm-chart->simple.js,这是一个我配置好的精简包。使用时可在我的组件源码tm-chart中 找到第67行,把此行注释去掉,引用。然后把第65行,注释掉不启用。当然你可根据自己的需要精简模块功能。
注意事项
见下方
ts
/**
* Echart图表
* @description 使用最新的5.3.2 。已经兼容了pc端
* ref:getChart:获取成功渲染的图表。
* 事件:onInit:渲染成功后执行,并返回chart对象。
* 安装百度图表 npm install echarts --save 后需要作下生产下的兼容,发布不影响,但开发时会报错,很烦。
* 请找到:node_modules/echarts/lib/core/echarts.js,
* 原文:
*
* if (process.env.NODE_ENV !== 'production') {
var root =
hasWindow ? window : global;
defaultRenderer = root.__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer;
var devUseDirtyRect = root?.__ECHARTS__DEFAULT__USE_DIRTY_RECT__;
defaultUseDirtyRect = devUseDirtyRect == null ? defaultUseDirtyRect : devUseDirtyRect;
改成:
* if (process.env.NODE_ENV !== 'production') {
var root =
hasWindow ? window : global;
【修改一】defaultRenderer = root?.__ECHARTS__DEFAULT__RENDERER__ ?? defaultRenderer;
【修改二】var devUseDirtyRect = root?.__ECHARTS__DEFAULT__USE_DIRTY_RECT__??null;
【修改三】defaultUseDirtyRect = devUseDirtyRect == null ? defaultUseDirtyRect : devUseDirtyRect;
}
*/
想升级包怎么办?
只要在cli项目的根目录下执行:npm install echarts --save
,如果想要具体版本号:npm install echarts@5.3.2 --save
, 把后面的版本号改下目标版本号就可以了。
🌶️ 图表 Chart 示例效果
查看模拟效果+
示例代码
vue
<template>
<tm-app>
<tm-sheet>
<tm-text
:font-size="30"
color="red"
_class="text-weight-b"
label="3.0.89开始真正的实现了所有平台的兼容,特别是在nvue下面更为流畅,性能是最好的。"
></tm-text>
<tm-text
:font-size="24"
label="这里只展示部分,更多请见Echarts(5.3.2)官网示例,官网所有示例均可用。包大小可以自行裁剪。以下示例,为官网复制过来,样式可能不太好看,请自行配置属性。webpc也兼容 "
></tm-text>
<tm-text
:font-size="24"
color="red"
label="特别强调:组件从3.0.89开始已经兼容了nvue端echarts(5.4.3),丝滑展示图表。但因为nvue是我映射的api接口,因此只提供部分接口供你使用。具体映射的接口数量见文档。"
></tm-text>
<!-- #ifdef MP -->
<tm-text color="red" label="小程序包超过大小,不演示,请前往h5或者app中预览效果."></tm-text>
<!-- #endif -->
</tm-sheet>
<!-- #ifndef MP -->
<tm-chart ref="chartDom" :height="600" @onInit="chartInit"></tm-chart>
<!-- #endif -->
</tm-app>
</template>
<script lang="ts" setup>
/**
* 由于采用了es6 import,所以按需裁剪变得更为简单,无需去官网下载压缩包,想要用到什么就导入什么。
* 按需裁剪包大小见官网配置:https://echarts.apache.org/zh/api.html#echarts.use
*/
import { ref, getCurrentInstance, onMounted } from 'vue'
import { onShow, onLoad } from '@dcloudio/uni-app'
import tmApp from '@/tmui/components/tm-app/tm-app.vue'
import tmSheet from '@/tmui/components/tm-sheet/tm-sheet.vue'
import tmText from '@/tmui/components/tm-text/tm-text.vue'
// #ifndef MP
import tmChart from '@/tmui/components/tm-chart/tm-chart.vue'
import { ECharts } from 'echarts'
import { chartdata } from './chartdata'
const chartDom = ref<InstanceType<typeof tmChart>>(null)
let chartdataAny: any = chartdata
const dkey = ref('lineChart')
onLoad((obj: any) => {
if (obj?.key !== '' && typeof obj?.key != 'undefined') {
dkey.value = obj?.key ?? 'lineChart'
}
})
function chartInit(chart: ECharts) {
chart.setOption(chartdata[dkey.value])
setTimeout(() => {
chartDom.value.getImg().then((e) => {
// 打印图表图片,记得要等动画结束再截取,这里只是演示,具体以你的情况为例做调整。
console.log(e)
})
}, 200)
}
// #endif
</script>
🌶️ 兼容性
APP-VUE | APP-NVUE | 小程序 | WEB/H5 | VUE3/TS |
---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
🌱 参数
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
width | Number | 750 | 宽度,单位rpx |
height | Number | 450 | 高度,单位rpx |
🌹 事件
想要渲染一个图表,一定要在onInit函数体内执行渲染图表。(即图表初始成功后)
事件名 | 参数 | 返回数据 | 描述 |
---|---|---|---|
onInit | - | Chart对象 | nvue平台见下方ref方法中介绍,非nvue平台见:百度图表对象,文档 |
click | event | 点击【nvue平台不支持】 | |
touchstart | event | 按下【nvue平台不支持】 | |
touchmove | event | 移动【nvue平台不支持】 | |
touchend | event | 松开【nvue平台不支持】 | |
mousedown | event | 按下【nvue平台不支持】 | |
mousemove | event | 移动【nvue平台不支持】 | |
mouseup | event | 松开【nvue平台不支持】 |
🌽 slot插槽
无
🥗 ref方法
getChart(),可返回当前的chart对象。 getImg(),可以导出当前的图表图片。
注意在nvue平台,是由我封装映射的接口api,nvue平台性能强大,包为全量包,对标百度图表所有功能。但api接口只有下方列出可用:
事件名 | 参数 | 返回数据 | 描述 |
---|---|---|---|
setOption | 对应百度echarts所需参数 | - | 百度图表,文档 |
getWidth | - | - | 百度图表,文档 |
getHeight | - | - | 百度图表,文档 |
getDom | - | refs.webview | 这里返回的是nvue下的webview对象 |
getOption | - | - | 百度图表,文档 |
resize | - | - | 百度图表,文档 |
showLoading | - | - | 百度图表,文档 |
hideLoading | - | - | 百度图表,文档 |