Skip to content
On this page

组件库文档 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-VUEAPP-NVUE小程序WEB/H5VUE3/TS
✔️✔️✔️✔️✔️

🌱 参数

参数名类型默认值描述
widthNumber750宽度,单位rpx
heightNumber450高度,单位rpx

🌹 事件

想要渲染一个图表,一定要在onInit函数体内执行渲染图表。(即图表初始成功后)

事件名参数返回数据描述
onInit-Chart对象nvue平台见下方ref方法中介绍,非nvue平台见:百度图表对象,文档
clickevent点击【nvue平台不支持】
touchstartevent按下【nvue平台不支持】
touchmoveevent移动【nvue平台不支持】
touchendevent松开【nvue平台不支持】
mousedownevent按下【nvue平台不支持】
mousemoveevent移动【nvue平台不支持】
mouseupevent松开【nvue平台不支持】

🌽 slot插槽

🥗 ref方法

getChart(),可返回当前的chart对象。 getImg(),可以导出当前的图表图片。

注意在nvue平台,是由我封装映射的接口api,nvue平台性能强大,包为全量包,对标百度图表所有功能。但api接口只有下方列出可用:

事件名参数返回数据描述
setOption对应百度echarts所需参数-百度图表,文档
getWidth--百度图表,文档
getHeight--百度图表,文档
getDom-refs.webview这里返回的是nvue下的webview对象
getOption--百度图表,文档
resize--百度图表,文档
showLoading--百度图表,文档
hideLoading--百度图表,文档