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中的过滤器

    十分钟带你读懂Vue中的过滤器

    过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的,因为它所实现的功能也能用计算属性或者函数调用的方式来实现。这篇文章主要为大家介绍了Vue中过滤器的使用,需要的可以了解一下
    2023-03-03
  • vue3+vite+axios 配置连接后端调用接口的实现方法

    vue3+vite+axios 配置连接后端调用接口的实现方法

    这篇文章主要介绍了vue3+vite+axios 配置连接后端调用接口的实现方法,在vite.config.ts文件中添加配置,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue动态生成dom并且自动绑定事件

    vue动态生成dom并且自动绑定事件

    本篇文章主要介绍了vue动态生成dom并且自动绑定事件,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • Vue插槽具体用法及实例分析

    Vue插槽具体用法及实例分析

    本文主要介绍了Vue框架中插槽的使用方法和应用场景。通过具体实例分析,详细讲解了插槽的具体用法,帮助读者深入理解Vue中插槽的使用和实现方式
    2023-05-05
  • 使用vue3+TS实现简易组件库的全过程

    使用vue3+TS实现简易组件库的全过程

    当市面上主流的组件库不能满足我们业务需求的时候,那么我们就有必要开发一套属于自己团队的组件库,下面这篇文章主要给大家介绍了如何使用vue3+TS实现简易组件库的相关资料,需要的朋友可以参考下
    2022-03-03
  • vue element-ui el-date-picker限制选择时间为当天之前的代码

    vue element-ui el-date-picker限制选择时间为当天之前的代码

    这篇文章主要介绍了vue element-ui el-date-picker如何限制选择时间为当天之前,文中给大家提供了代码段和截图,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • setTimeout在vue中的正确使用方式

    setTimeout在vue中的正确使用方式

    这篇文章主要介绍了setTimeout在vue中的正确使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue获取input值的四种常用方法

    Vue获取input值的四种常用方法

    Vue是一种流行的Web开发框架,它提供了一个双向绑定的语法糖。在Vue中,我们可以很容易地获取页面上的数据,并且可以实时的响应其变化,这篇文章主要给大家介绍了关于Vue获取input值的四种常用方法,需要的朋友可以参考下
    2023-09-09
  • vue ant design 封装弹窗表单的使用

    vue ant design 封装弹窗表单的使用

    这篇文章主要介绍了vue ant design 封装弹窗表单的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue基于input实现密码的显示与隐藏功能

    vue基于input实现密码的显示与隐藏功能

    这篇文章主要介绍了vue基于input实现密码的显示与隐藏功能,文末给大家介绍了vue 如何实现切换密码的显示与隐藏效果,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-01-01

最新评论