echarts 图表不显示的问题

是这样的,点击详情,再点击统计,切换的时候就不会显示echarts图表,刚开始使用的是next Tick,没有使用定时器,后来加上了定时器就实现了如下所示:

代码是如下

javascript 复制代码
const chartContainer = ref(null); // 用于引用 DOM 容器
let chartInstance: echarts.ECharts | null = null; // 用于存储 ECharts 实例
// 渲染图表
const renderChart = () => {
  const option = {
    title: {
      text: `调用量统计`,
      left: 10
    },
    toolbox: {
      feature: {
        dataZoom: {
          yAxisIndex: false
        },
        saveAsImage: {
          pixelRatio: 2
        }
      }
    },
    tooltip: {
      trigger: 'axis',
      axisPointer: {
        type: 'shadow'
      },
      show: true
    },
    dataset: {
      source: [
        ['time', dataCount.value.categories],
        ['completion_token', dataCount.value.comptoken],
        ['prompt_token', dataCount.value.prompttoken],
        ['total_token', dataCount.value.totaltoken]
      ]
    },
    grid: {
      bottom: 90
    },
    dataZoom: [
      {
        type: 'inside'
      },
      {
        type: 'slider'
      }
    ],
    xAxis: {
      data: dataCount.value.categories,
      silent: false,
      splitLine: {
        show: false
      },
      splitArea: {
        show: false
      }
    },
    yAxis: [
      { scale: true }
    ],
    series: [
      { type: 'bar', seriesLayoutBy: 'row', name: 'Completion Token', data: dataCount.value.comptoken },
      { type: 'bar', seriesLayoutBy: 'row', name: 'Prompt Token', data: dataCount.value.prompttoken },
      { type: 'bar', seriesLayoutBy: 'row', name: 'Total Token', data: dataCount.value.totaltoken }
    ]
  };
  chartInstance?.setOption(option);
};
// 初始化图表
const initChart = () => {
  if (chartContainer.value) {
    chartInstance = echarts.init(chartContainer.value);
    renderChart();
  }
};
const handleTabChange1 = async (names: string) => {
  if (names === 'oasis') {
    if (chartInstance) {
      chartInstance.dispose(); // 销毁旧的图表实例
    }
      initChart();
  }
};
// 生命周期钩子
onMounted(() => {
    initChart();
});

onUnmounted(() => {
  if (chartInstance) {
    chartInstance.dispose(); // 销毁 ECharts 实例
    chartInstance = null;
  }
});
  <NTabs default-value="oasis" justify-content="space-evenly" type="line" 		        @update:value="handleTabChange1">
       <NTabPane name="oasis" tab="调用量统计">
        <div ref="chartContainer" class="h-500px w-100%"></div>
       </NTabPane>
       <NTabPane name="the beatles" tab="调用量详情">
         <NDataTable :columns="columns" :data="dataTable" :bordered="false" />
      </NTabPane>
   </NTabs>

刚开始我是这样写的,然后在点击tab切换的时候,echarts图表咋的都出不来,后来看了好多方法,使用nextTick 和定时器 实现了

再点击切换的时候,使用nextTick

javascript 复制代码
const handleTabChange1 = async (names: string) => {
  if (names === 'oasis') {
    if (chartInstance) {
      chartInstance.dispose(); // 销毁旧的图表实例
    }
    await nextTick(() => {
      initChart();
    });
    setTimeout(() => {
      initChart();
    }, 500);
  }
};

希望可以帮到你们!!

相关推荐
花开盛夏^.^5 小时前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
Dxy12393102166 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷6 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
馒头不想说话6 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥8 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马8 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头9 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen9 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健9 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒9 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端