当前位置: 首页 > 知识库问答 >
问题:

echarts - vue3 封装了折线图组件,但是数据变化更新的时候折线图不更新?

公孙巴英
2023-06-03

lineChart 组件代码

<template>
  <div :id="name" :style="echartStyle"></div>
</template>
<script setup lang='ts'>
import { onBeforeUnmount, onMounted, ref, toRef, watch } from 'vue'

import * as Echarts from 'echarts'
const prop = defineProps({
  name: String,
  echartStyle: Object,
  option: Object,
  onClick: Object
})
let echartsModel = ref(null)
watch(
  () => prop.option,
  () => {
    initEchart()
  }
)
watch(
  () => prop.echartStyle,
  () => {
    if (echartsModel) {
      this.echartsModel.resize()
    }
  }
)

const initEchart = () => {
  echartsModel = Echarts.init(document.getElementById(prop.name))
  echartsModel.clear()
  echartsModel.showLoading('default', {
    text: '加载中',
    color: '#409EFF',
    textColor: '#409EFF',
    maskColor: 'rgba(0, 0, 0, 0.5)',
    zlevel: 0
  })
  echartsModel.setOption(prop.option)
  echartsModel.off('click')
  if (prop.onClick) {
    echartsModel.on('click', (param) => {
      context.emit('chartClick', param)
    })
  }
  echartsModel.hideLoading()
}

const drawResize = () => {
  if (echartsModel) {
    echartsModel.resize()
  }
}
onMounted(() => {
  window.addEventListener('resize', drawResize, 20)
  initEchart()
})
onBeforeUnmount(() => {
  echartsModel.dispose()
  window.removeEventListener('resize', drawResize, 20)
})


</script>

调用代码

  <lineChart :name="echartName" :echartStyle="echartStyle" :option="option" v-show="showLine"></lineChart>

赋值代码

 await queryData(form)
 option.value = setOption(tableData.value);
 showLine.value = true;

注意

let option = ref({});

option 我定义的是 ref的 难道要定义成reactive的空对象????试了 报错

共有2个答案

拓拔阎宝
2023-06-03
const initEchart = () => {
  echartsModel = Echarts.init(document.getElementById(prop.name))
  echartsModel.clear()
  echartsModel.showLoading('default', {
    text: '加载中',
    color: '#409EFF',
    textColor: '#409EFF',
    maskColor: 'rgba(0, 0, 0, 0.5)',
    zlevel: 0
  })
  echartsModel.setOption(prop.option, true) // 设置 notMerge 参数为 true
  echartsModel.off('click')
  if (prop.onClick) {
    echartsModel.on('click', (param) => {
      context.emit('chartClick', param)
    })
  }
  echartsModel.hideLoading()
}

或者:

watch(
  () => prop.option,
  (newOption) => {
    console.log(newOption)
    initEchart()
  }
)
钱飞翼
2023-06-03

你定义的echartsModel是ref类型的

let echartsModel = ref(null)

试试把它要赋值的地方改成echartsModel.value

 类似资料:
  • 基本折线图 <template> <ve-line :data="chartData" :settings="chartSettings"></ve-line> </template> <script> export default { data () { this.chartSettings = {} return { chartData: { columns: ['日期',

  • 实时显示传感器数据。 用法 Your browser does not support the video tag. 案例:数据变化趋势 功能:显示数字改变的规律

  • echarts折线图展示问题: 使用折线图展示一年的采购价格,哪一天采购了就会有一个对应的价格数据,没有采购的日期数据就为空.使用‘connectNulls’将数据连接起来 遇到的问题是,由于x轴坐标太多,echarts自身进行了优化展示,会导致’2023-12-01‘对应的‘12’这个数据点不展示。由于每个点都代表着“有进行采购”这个动作,所以有数据的点一定不能省去 例如下图:‘2021-11-

  • 我有一个熊猫数据框,格式如下: 我想要一个排序的线图,其值在y轴上,如下所示: 不管怎样:我也希望在同一个情节中的每一组都有相似的台词。(或者只是组的两行,但它们的大小不同) 有人能帮我吗?我想这是可能的? 我使用Python3.x和pandas 0.16.2。我更喜欢使用matplotlib或seaborn。

  • 本文向大家介绍jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法,包括了jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法。分享给大家供大家参考,具体如下: 1、问题背景 设计一条折线图,但是图形中不用插件自带的颜色,需要自定义

  • 主要内容:绘制单条折线,绘制多条折线图折线图(line chart)是我们日常工作、学习中经常使用的一种图表,它可以直观的反映数据的变化趋势。与绘制柱状图、饼状图等图形不同,Matplotlib 并没有直接提供绘制折线图的函数,因此本节着重讲解如何绘制一幅折线图。 绘制单条折线 下面示例是关于 小牛知识库用户活跃度的折线图: 显示结果如下: 绘制多条折线图 当学习完如何绘制单条折线的绘制后,再绘制多条折线也变的容易,只要准备好绘制多条