更新配置或数据
更新图表配置或数据使用 xCharts.updateData(opts) 方法。
关于本地配置与接口请求
旧版文档里的很多示例直接使用:
ts
import opts from './index.uts'这种方式本身没有问题,index.uts 就是本地图表配置数据。
在新版项目里,像 xcharts/arcbar/arcbar.uvue:16 这样的页面之所以改成接口请求,不是因为图表配置必须走接口,而是因为某些图表样例数据体量较大,直接把大量配置长期内置在示例页面链路中,可能会造成编译内存压力。
因此文档理解上要区分两件事:
import opts from './index.uts':代表本地静态配置方案TuiApi('getPagedCharts', ...):代表示例工程为了减轻包体和编译压力采用的数据获取方案
如果你在自己的业务项目里数据量可控,完全可以直接使用本地配置。
本地配置示例
ts
import opts from './index.uts'
function initFinished(e) {
charts = e
opts.forEach((item, index) => {
const chart = e.add(index, item.option)
chart.setCoordinates({ height: 287, xOffset: 0, yOffset: itemH * index })
chart.draw()
})
}何时考虑接口方案
以下情况可以考虑像 arcbar.uvue 那样把示例数据放到接口侧:
- 单个图表类型的
index.uts样例特别多 - 配置对象很大,包含大量地图、词云或复杂序列数据
- 文档演示项目只是展示平台,不希望本地打包过重
- 编译时已经出现明显内存占用偏高的问题
示例
以下是一个如何使用 updateData 方法的示例:
javascript
<template>
<!-- #ifdef APP-ANDROID -->
<scroll-view style="flex: 1;">
<!-- #endif -->
<view>
<text style="color: red;margin: 30rpx;text-align: center;">一个canvas绘制多个图表,减少性能开销</text>
<button type="primary" style="margin: 30rpx;" @click="updatearcbar">更新第一绘制区内容示例</button>
<view style="margin: 30rpx;display: flex;align-items: center;justify-content: center;">
<text>图表互动返回值</text>
<text>图表索引:{{select_data.index}}</text>
<text>提示内容的索引:{{select_data.tipsIndex}}</text>
<text>显示隐藏对应的索引:{{select_data.legendIndex}}</text>
</view>
<tui-xechars :style="`height:${canvasInsHeight}px;margin: 0 30rpx;`" @initFinished="initFinished"
@select="select"></tui-xechars>
<button @click="test">增加图表</button>
</view>
<!-- #ifdef APP-ANDROID -->
</scroll-view>
<!-- #endif -->
</template>
<script setup>
const tuixcharsins = ref<ComponentPublicInstance | null>(null)
import opts from './index.uts'
import { TuiCharts, TuiDrawCharts } from '@/uni_modules/tui-xechars'
const itemH : number = 287
let charts : TuiCharts | null = null
const select_data = ref<UTSJSONObject>({})
const canvasInsHeight = ref<number>(8 * itemH)
function initFinished(e : TuiCharts) {
charts = e
opts.forEach((item : UTSJSONObject, index : number) => {
const bar = e.add(index, item.getJSON('option')!)
bar.setCoordinates({ height: 287, xOffset: 0, yOffset: itemH * index })
bar.draw()
})
}
function select(e : UTSJSONObject) {
select_data.value = e
}
function test() {
const bar = charts!.add(7, opts[1].getJSON('option')!)
bar.setCoordinates({ height: 287, xOffset: 0, yOffset: itemH * 7 })
bar.draw()
}
function updatearcbar() {
const char = charts!
const bar = char.getDrawCharts(0)!
bar.update({
"series": [
{
"data": [
{ "value": 50 },
{ "value": 60 },
{ "value": 55 },
{ "value": 65 },
{ "value": 45 },
{ "value": 70 }
],
"name": "目标值"
},
{
"data": [
{ "value": 10 },
{ "value": 20 },
{ "value": 15 },
{ "value": 25 },
{ "value": 5 },
{ "value": 30 }
],
"name": "完成量"
}
]
})
}
</script>