vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法
vue3 集成 echarts 最大的坑就是出現(xiàn)了,reactive 的數(shù)據(jù) 刷新了,但圖表缺不會刷新,查了很多資料,試了很多方式都沒效果,最后測試出來解決方法很簡單:
核心代碼:
// 省略非核心代碼....... const init = () => { chart.value = globalProperties?.echarts.init(pieChartRef.value) chart.value.setOption(option) } watch( () => props.data, () => { // 數(shù)據(jù)變化時,重新對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, () => { // 數(shù)據(jù)變化時,重新對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
到此這篇關(guān)于vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法的文章就介紹到這了,更多相關(guān)vue3集成echarts后圖表不刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中使用iview自定義驗(yàn)證關(guān)鍵詞輸入框問題及解決方法
這篇文章主要介紹了vue中使用iview自定義驗(yàn)證關(guān)鍵詞輸入框問題及解決方法,本文通過實(shí)例結(jié)合代碼的形式給大家介紹解決方法,需要的朋友可以參考下2018-03-03Vue數(shù)據(jù)更新視圖不更新的幾種解決方案小結(jié)
這篇文章主要介紹了Vue數(shù)據(jù)更新視圖不更新的幾種解決方案小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08Vee-validate 父組件獲取子組件表單校驗(yàn)結(jié)果的實(shí)例代碼
vee-validate 是為 Vue.js 量身打造的表單校驗(yàn)框架,允許您校驗(yàn)輸入的內(nèi)容并顯示對應(yīng)的錯誤提示信息。這篇文章主要介紹了Vee-validate 父組件獲取子組件表單校驗(yàn)結(jié)果 ,需要的朋友可以參考下2019-05-05Vue 電商后臺管理項(xiàng)目階段性總結(jié)(推薦)
這篇文章主要介紹了Vue 電商后臺管理項(xiàng)目階段性總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Vue封裝遠(yuǎn)程下拉框組件的實(shí)現(xiàn)示例
本文主要介紹了Vue封裝遠(yuǎn)程下拉框組件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Vue3父子組件傳參有關(guān)sync修飾符的用法詳解
這篇文章主要給大家介紹關(guān)于前端Vue3父子組件傳參有關(guān)sync修飾符的用法詳細(xì)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09詳解vue-cli + webpack 多頁面實(shí)例應(yīng)用
本篇文章主要介紹了詳解vue-cli + webpack 多頁面實(shí)例應(yīng)用,具有一定的參考價值,有興趣的可以了解一下2017-04-04