uni-app中使用图表eacharts

参考:uni插件链接uni插件链接

npm install echarts

在uni_modules文件夹导入lime-echart包:git地址  或者uni直接导入uni地址

使用

vue3

配置参考echarts官网

<template>
    <view class="ech">
        <l-echart ref="chartdom"></l-echart>
    </view>
</template>
<style lang="scss">
//设置大小
.ech {
        width: 116rpx;
        height: 86rpx;
    }
</style>

 js

 import * as echarts from 'echarts'
    import {
        ref,
        reactive,
        toRefs,
        onMounted
    } from 'vue'
    import {
        onReady,
        onLoad,
        onShow,
        onHide
    } from '@dcloudio/uni-app'
    let optionEch = reactive({
        data: {
            animation: true,//折线图动画
            toolbox: {
                show: true,
                feature: {
                    // dataZoom: {
                    //   yAxisIndex: 'none'
                    // },
                    // dataView: { readOnly: false },
                    // magicType: { type: ['line', 'bar'] },
                    restore: {},
                    // saveAsImage: {}//下载我没整好
                }
            },
           title: {
                show: true, //false
                text: "累计收益走势图", //主标题文本
                textStyle: {
                    fontSize: 12,
                }
            },
            tooltip: {
                show: true,
                trigger: 'axis',
                backgroundColor: "rgba(0,0,0,0.4)",
                textStyle: {
                    color: "#fff",
                    fontSize: "12",
                },
            },
            legend: {
                data: ['单位净值', '累计净值']
            },
            grid: {
                left: 10,
                right: 10,
                bottom: 55,
                top: 40,
                containLabel: true
            },
            xAxis: [{
                show: true,
                type: 'category',
                boundaryGap: false,
                data: [1, 2, 3],
                axisLabel: {
                    rotate: 50
                }
            }],
            yAxis: [{
                show: true,
                axisLine: {
                    show: true
                },
                axisTick: {
                    show: true
                },
                type: 'value',
                axisLabel: {
                    formatter: function(value, index) {
                        return value.toFixed(3);
                    }
                },
                min: function(value) {
                    return value.min * 0.999;
                },
                max: function(value) {
                    return value.max * 1.002;
                },
                scale: true, //自适应
            }],
            dataZoom: [{
                    type: "slider",
                    xAxisIndex: 0,
                    filterMode: "none"
                     },
                {
                    type: "inside",
                    xAxisIndex: 0,
                    filterMode: "none"
                }
            ],
            series: [{
                    name: '单位净值',
                    type: 'line',
                    smooth: false,
                    colorBy: "series",
                    data: [4, 5, 6],
                    color: '#00aaff', //改变折线点的颜色
                    lineStyle: {
                        color: '#00aaff' //改变折线颜色
                    },
                },
                {
                    name: '累计净值',
                    type: 'line',
                    smooth: false,
                    colorBy: "series",
                    data: [7, 8, 9],
                    color: '#c20000', //改变折线点的颜色
                    lineStyle: {
                        color: '#c20000' //改变折线颜色
                    }
                },
            ]
           }
    })
    let chartdom = ref(null)
    onMounted(() => {
    // 把 echarts 传入
        chartdom.value.init(echarts, chartdom => {//初始化调用函数,第一个参数是传入echarts,第二个参数是回调函数,回调函数的参数是 chart 实例
            chartdom.setOption(optionEch.data);
        })
    })

 在接口数据请求到之后初始化折线图

onMounted(() => {
        // 把 echarts 传入
        // chartdom.value.init(echarts, chartdom => {
        //     chartdom.setOption(optionEch.data);
        // })
        setTimeout(() => {
            fundValuePost();
        }, 200)
    })
const fundValuePost = () => {
        //将图表配置对象复制一份
        let chartres = JSON.parse(JSON.stringify(optionEch.data))
        chartres.xAxis[0].data = []
        chartres.series.forEach((item) => {
            item.data = []
        })
      //调用接口
        fundValueApi(fundValuePage).then((res) => {
            res.data.data.forEach((item) => {
                chartres.xAxis[0].data.push(item.fundValueDate)
                chartres.series[0].data.push(item.unitFundValue)
                chartres.series[1].data.push(item.accrueFundValue)
            })
            optionEch.data = JSON.parse(JSON.stringify(chartres));
            // 使用请求到的数据,初始化图表
            chartdom.value.init(echarts, chartdom => {
                chartdom.setOption(optionEch.data);
            })
        }).catch((err) => {
            console.log(err, '收益曲线err')
        });
    }

一个页面使用多个折线图

<template>
    <view class="ech">
        <l-echart ref="chartdom"></l-echart>
    </view>
    <view class="ech">
        <l-echart ref="chartdom"></l-echart>
    </view>
</template>

js

let chartdom = ref(null)//页面有多个chartdom时,chartdom为数组
    onMounted(async () => {
         let productGe = await productGetListFun()//获取产品列表productGetListDatas.data
        setTimeout(() => {
            fundValuePost();
        }, 100)
    })
 let fundValuePage = reactive({
        month: "1",
        orderBy: "asc",
        productId: null
    })
 const fundValuePost = () => {      
        let chartArr = []
        productGetListDatas.data.forEach((items, indexs) => {//productGetListDatas.data为提前请求拿到的产品列表,然后拿id去请求折线图的数据
            let chartres = JSON.parse(JSON.stringify(optionEch.data))
            let indexx = indexs
            // console.log('chartres',chartres )
            chartres.xAxis[0].data = []
            chartres.series.forEach((item) => {
                item.data = []
            })//数据全部清空               
            fundValuePage.productId = items.productId//拿id去请求折线图的数据
            fundValueApi(fundValuePage).then((res) => {
                // console.log(indexx, '收益曲线res', res)
                res.data.data.forEach((item) => {
                    chartres.xAxis[0].data.push(item.fundValueDate)
                    chartres.series[0].data.push(item.accrueFundValue)
                })
                let objArr = {
                    ind: indexx,//对应产品数组的index
                    chartresData: chartres
                }
                chartArr.push(objArr)//把拿到的所有的折线图数据,全部放入chartArr数组
                if (chartArr.length == productGetListDatas.data.length) {
                    chartArr.forEach((item, index) => {//所有的产品数据全部拿到后,用图表数据的indexx对应产品数组的index,进行遍历,初始化对应图表
                        chartdom.value[item.ind].init(echarts, chartdom => {
                            chartdom.setOption(item.chartresData);
                        })
                    })
                }
            }).catch((err) => {
                console.log(err, '收益曲线err')
            });
        })
    
 }

<think>根据用户需求,用户想在uni-app中集成和使用echarts图表库。结合引用内容,我将提供详细步骤和示例代码。 步骤1:安装echarts组件 引用[2]提到有专为uni-app打造的echarts组件,开箱即用。我们可以使用这个组件。 步骤2:引入组件 在需要使用的页面中引入组件,如引用[4]所示。 步骤3:配置图表数据 在页面的data中定义图表数据,如引用[4]中的chart_data。 步骤4:在模板中使用组件 如引用[4]所示,使用<Chart>标签并传递数据。 具体步骤: 1. 下载组件 从引用[2]提供的地址下载:https://gitcode.com/Premium-Resources/c426d 2. 将组件放入uni-app项目 将下载的组件(通常是一个文件夹,如`components`)复制到项目的`components`目录下。 3. 在页面中引入组件 在需要使用图表的页面的`<script>`标签中引入组件: ```javascript import Chart from '@/components/your-chart-component-path/Chart.vue' export default { components: { Chart } } ``` 4. 准备图表数据 在页面的data中定义图表数据,例如: ```javascript data() { return { chart_data: { xAxisData: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], seriesData: [120, 200, 150, 80, 70, 110, 130] } } } ``` 5. 在模板中使用 ```html <template> <view> <Chart :chartData="chart_data" :titleMsg="{ title: '销售趋势', unit: '单位:元' }"></Chart> </view> </template> ``` 6. 自定义图表类型(可选) 如果需要不同类型的图表(如饼图、折线图等),可以通过传递不同的配置项来实现。引用[3]提到ECharts有丰富的配置选项。 例如,要创建折线图,可以在chart_data中添加type属性: ```javascript chart_data: { type: 'line', // 默认为柱状图,可设置为'line'、'pie'等 xAxisData: ..., seriesData: ... } ``` 注意事项: - 确保组件路径正确 - 图表数据需要符合组件要求的格式 - 该组件支持H5、App和小程序,但不同平台可能有细微差异,需测试 如果遇到问题,可以查看组件的文档或示例代码,引用[2]的项目地址中可能有详细说明。 §§相关问题§§ 1. 如何在uni-app中实现echarts图表的动态更新? 2. uni-app使用echarts有哪些常见问题及解决方法? 3. 如何自定义echarts图表的样式和交互?</think>### uni-app 集成 ECharts 图表使用方法 在 uni-app 中集成 ECharts 图表库需要以下步骤,结合引用内容提供详细解决方案: --- #### 1. **安装 ECharts 组件** 使用专为 uni-app 优化的 echarts 组件(引用[2]): ```bash npm install echarts mpvue-echarts --save # 或直接下载组件(引用[2]项目地址): # https://gitcode.com/Premium-Resources/c426d ``` --- #### 2. **配置 uni-app 项目** ##### 2.1 修改 `pages.json` 启用自定义组件 ```json { "usingComponents": { "ec-canvas": "/components/ec-canvas/ec-canvas" } } ``` ##### 2.2 创建图表容器组件 在 `/components` 目录下创建 `ec-canvas` 组件(引用[4]): ```vue <!-- ec-canvas.vue --> <template> <canvas :canvas-id="canvasId" :id="canvasId" class="ec-canvas"></canvas> </template> <script> import * as echarts from 'echarts'; export default { props: ['canvasId', 'option'], mounted() { this.initChart(); }, methods: { initChart() { const chart = echarts.init(this.$scope, null, { width: this.width, height: this.height }); chart.setOption(this.option); } } } </script> ``` --- #### 3. **在页面中使用图表** ```vue <template> <view> <!-- 引用图表组件(引用[4]) --> <ec-canvas canvas-id="myChart" :option="chartOption" /> </view> </template> <script> import * as echarts from 'echarts'; export default { data() { return { chartOption: { title: { text: '销售数据统计', left: 'center' }, tooltip: { trigger: 'axis' }, xAxis: { data: ['1月', '2月', '3月', '4月', '5月'] }, yAxis: { type: 'value' }, series: [{ name: '销售额', type: 'bar', data: [120, 200, 150, 80, 70] }] } } } } </script> ``` --- #### 4. **多平台适配要点** - **H5/App端**:直接使用 echarts 完整包 - **小程序端**: 1. 使用 `ec-canvas` 组件 2. 在 `main.js` 添加: ```js import { registerCanvas } from 'mpvue-echarts' registerCanvas(echarts) ``` --- #### 5. **高级功能配置** ```javascript // 动态更新数据(引用[3]) updateChart() { const chart = echarts.getInstanceByDom(this.$refs.chart); chart.setOption({ series: [{ data: [90, 150, 200, 60, 50] // 新数据 }] }); } // 添加交互事件(引用[3]) chart.on('click', (params) => { uni.showToast({ title: `点击了${params.name}: ${params.value}` }); }); ``` --- #### 注意事项 1. 小程序需在 `manifest.json` 配置 `"usingComponents": true` 2. 图表宽度需明确设置(小程序默认为 300px) 3. 大数据量建议使用 `large: true` 配置开启大数据模式 4. 多端兼容问题可通过条件编译解决: ```js // #ifdef H5 || APP-PLUS import * as echarts from 'echarts'; // #endif ``` > 通过将 Echarts 集成到 uni-app 项目中,开发者可以利用 ECharts 强大的图表类型和配置能力,满足各种数据展示需求。这种结合方式不仅提高了开发效率,同时也保证了数据图表的表现力和交互性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值