uCharts是uniapp项目中常用的跨平台图表库。原文以折线图为例,先在HBuilderX中通过工具>插件安装进入DCloud搜索uchart,再把插件导入当前项目;项目目录中出现该插件后,到uCharts官网演示页找示例代码做最小验证。原文特别提示:示例若按Vue2写法复制,Vue3项目可能需要转换,案例采用Vue3+TS。
一、组件与数据结构
在页面中使用qiun-data-charts组件,type设为line,opts传入图表配置,chartData传入分类和系列数据。用interface约束ChartData,categories为字符串数组,series为包含name和data的对象数组。完整示例中,opts包含颜色数组、padding、enableScroll、legend、xAxis.disableGrid、yAxis.gridType与dashLength、extra.line.type/width/activeType等参数。
- <template>
- <view class='charts-box'>
- <qiun-data-charts
- type='line'
- :opts='opts'
- :chartData='chartData'
- />
- </view>
- </template>
- <script lang='ts' setup>
- import { ref, onMounted } from 'vue'
- interface ChartData {
- categories: string[]
- series: {
- name: string
- data: number[]
- }[]
- }
- const chartData = ref<ChartData>({
- categories: [],
- series: []
- })
- const opts = {
- color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'],
- padding: [15, 10, 0, 15],
- enableScroll: false,
- legend: {},
- xAxis: {
- disableGrid: true
- },
- yAxis: {
- gridType: 'dash' as const,
- dashLength: 2
- },
- extra: {
- line: {
- type: 'straight' as const,
- width: 2,
- activeType: 'hollow' as const
- }
- }
- }
- const getServerData = () => {
- setTimeout(() => {
- const res: ChartData = {
- categories: ['2018', '2019', '2020', '2021', '2022', '2023'],
- series: [
- { name: '成交量A', data: [35, 8, 25, 37, 4, 20] },
- { name: '成交量B', data: [70, 40, 65, 100, 44, 68] },
- { name: '成交量C', data: [100, 80, 95, 150, 112, 132] }
- ]
- }
- chartData.value = JSON.parse(JSON.stringify(res))
- }, 500)
- }
- onMounted(() => {
- getServerData()
- })
- </script>
- <style scoped>
- .charts-box {
- width: 100%;
- height: 300px;
- }
- </style>
复制代码
二、配置抽离
原文把opts抽成config/chartConfig.ts,导出lineChartOpts,再在组件中导入。这样多页面复用折线图配置,避免重复维护颜色、坐标轴和line样式。
- // config/chartConfig.ts
- export const lineChartOpts = {
- color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'],
- padding: [15, 10, 0, 15],
- enableScroll: false,
- legend: {},
- xAxis: { disableGrid: true },
- yAxis: { gridType: 'dash', dashLength: 2 },
- extra: { line: { type: 'straight', width: 2, activeType: 'hollow' } }
- }
复制代码
组件中导入配置:
- import { lineChartOpts } from '@/config/chartConfig'
- const opts = lineChartOpts
复制代码
三、数据加载与渲染注意
getServerData用setTimeout 500毫秒模拟服务器返回,categories为2018到2023,series为成交量A/B/C三组数据。数据返回后通过深拷贝赋给chartData.value,再触发图表更新;onMounted中调用。charts-box设置width:100%和height:300px,高度缺失会导致图表不可见。微信小程序端可验证折线图效果。原文的opts参数可按接口返回结构复用;若采用配置抽离,组件中只保留数据请求与赋值逻辑,降低配置散落带来的维护成本。
适用场景:uniapp跨端页面需要轻量折线图展示,尤其微信小程序端;数据接口返回categories和series结构时,可直接映射。原文未涉及后端接口实现,示例使用定时器模拟响应,接入真实请求时替换getServerData内部逻辑即可。
总结:集成路径为插件安装与导入、官网示例验证、Vue3+TS组件接入、opts抽离、模拟数据渲染、小程序端确认。代码重点在ChartData类型、opts参数和深拷贝赋值。 |