vue3集成echarts数据刷新后图表不刷新的解决方法

 更新时间:2023年08月10日 10:20:36   作者:三劫散仙  
vue3 集成 echarts 最大的坑就是出现了,reactive 的数据 刷新了,但图表缺不会刷新,所以本文就给大家详细的介绍一下vue3集成echarts数据刷新后图表不刷新的解决方法,需要的朋友可以参考下

vue3 集成 echarts 最大的坑就是出现了,reactive 的数据 刷新了,但图表缺不会刷新,查了很多资料,试了很多方式都没效果,最后测试出来解决方法很简单:

核心代码:

 
       // 省略非核心代码.......
        const init = () => {
            chart.value = globalProperties?.echarts.init(pieChartRef.value)
            chart.value.setOption(option)
        }
			watch(
            () => props.data,
            () => {
                // 数据变化时,重新对series里面的 data 赋值即可
                option.series[0].data= top10()
                chart.value.setOption(option)
            }
        )
        onMounted(() => {
            init()
            addEventListener('resize', resize)
        })

附上 TSX 整个页面参考

import {defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, PropType, ref, watch} from 'vue'
import type { Ref } from 'vue'
import {ECharts, throttle} from "echarts";
import {useI18n} from "vue-i18n";
import {EChartsType} from "echarts/types/dist/echarts";
const props = {
    height: {
        type: [String, Number] as PropType<string | number>,
        default: 590
    },
    width: {
        type: [String, Number] as PropType<string | number>,
        default: '100%'
    },
    data: {
        type: Array as PropType<Array<any>>
    }
}
const PieChart = defineComponent({
    name: 'PieChart',
    props,
    setup(props) {
        const pieChartRef: Ref<HTMLDivElement | null> = ref(null)
        const top10 = () => {
            return props.data.length>=10 ? props.data.slice(0,10) : props.data
        }
        const option = {
            title: {
                text: '分组聚合 Top 10',
                left: 'center',
                textStyle: {
                   color:'white'
                },
            },
            tooltip: {
                trigger: 'item',
                backgroundColor: '#fff'
            },
            legend: {
                bottom: '0%',
                left: 'center',
                textStyle:{
                    fontSize: 16,
                    color: 'white',
                    fontWeight: 'bold'
                }
            },
            series: [
                {
                    type: 'pie',
                    radius: ['35%', '60%'],
                    center: ['50%', '40%'],
                    avoidLabelOverlap: false,
                    emphasis: {
                        label: {
                            show: true,
                            fontSize: 30,
                            fontWeight: 'bolder',
                            color: 'white'
                        }
                    },
                    label: {
                        show: false,
                        position: 'center'
                    },
                    labelLine: {
                        show: false
                    },
                    data: top10()
                }
            ]
        }
        const globalProperties = getCurrentInstance()?.appContext.config.globalProperties
        let chart:Ref<ECharts | null>  = ref(null)
        const init = () => {
            chart.value = globalProperties?.echarts.init(pieChartRef.value)
            chart.value.setOption(option)
        }
        const resize = throttle(() => {
            chart && chart.value.resize()
        }, 20)
        watch(
            () => props.data,
            () => {
                // 数据变化时,重新对series里面的 data 赋值即可
                option.series[0].data= top10()
                chart.value.setOption(option)
            }
        )
        onMounted(() => {
            init()
            addEventListener('resize', resize)
        })
        return { pieChartRef }
    },
    render() {
        const { height, width } = this
        return (
            <div
                ref='pieChartRef'
                id={'myChart'}
                style={{
                    height: "300px",
                    width: typeof width === 'number' ? width + 'px' : width
                }}
            >
            </div>
        )
    }
})
export default PieChart

到此这篇关于vue3集成echarts数据刷新后图表不刷新的解决方法的文章就介绍到这了,更多相关vue3集成echarts后图表不刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue中import与@import的区别及使用场景说明

    Vue中import与@import的区别及使用场景说明

    这篇文章主要介绍了Vue中import与@import的区别及使用场景说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue时间戳和时间的相互转换方式

    vue时间戳和时间的相互转换方式

    本文通过示例代码介绍了vue时间戳和时间的相互转换方式,通过场景分析介绍了vue3使用组合式api将时间戳格式转换成时间格式(2023年09月28日 10:00),感兴趣的朋友一起看看吧
    2023-12-12
  • Vue中通过属性绑定为元素绑定style行内样式的实例代码

    Vue中通过属性绑定为元素绑定style行内样式的实例代码

    这篇文章主要介绍了Vue中通过属性绑定为元素绑定style行内样式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 解决vue3中使用echart报错:Cannot read properties of undefined (reading ‘type‘)

    解决vue3中使用echart报错:Cannot read properties of&n

    在Vue项目中使用Echarts进行数据可视化是非常常见的需求,然而有时候在引入Echarts的过程中可能会遇到报错,本文主要介绍了解决vue3中使用echart报错:Cannot read properties of undefined (reading ‘type‘),感兴趣的可以了解一下
    2024-01-01
  • vue视频播放插件vue-video-player的具体使用方法

    vue视频播放插件vue-video-player的具体使用方法

    这篇文章主要介绍了vue视频播放插件vue-video-player的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解Webstorm 新建.vue文件支持高亮vue语法和es6语法

    详解Webstorm 新建.vue文件支持高亮vue语法和es6语法

    这篇文章主要介绍了Webstorm 添加新建.vue文件功能并支持高亮vue语法和es6语法,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • vue中使用axios请求post接口发送两次

    vue中使用axios请求post接口发送两次

    这篇文章主要为大家介绍了vue中使用axios请求post接口,请求会发送两次原因解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Vue中的v-for列表循环示例详解

    Vue中的v-for列表循环示例详解

    循环使用v-for指令,v-for指令需要以site in sites形式的特殊语法,sites是源数据数组并且site是数组元素迭代的别名,下面这篇文章主要给大家介绍了关于Vue中v-for列表循环的相关资料,需要的朋友可以参考下
    2022-11-11
  • vue踩坑记-在项目中安装依赖模块npm install报错

    vue踩坑记-在项目中安装依赖模块npm install报错

    这篇文章主要介绍了vue踩坑记-在项目中安装依赖模块npm install报错,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue-router安装和使用详解

    vue-router安装和使用详解

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用,分步骤介绍了安装和使用vue-router的方法,感兴趣的朋友跟随小编一起看看吧
    2023-08-08

最新评论