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);
  }
};

希望可以帮到你们!!

相关推荐
kgduu11 分钟前
js之事件系统
javascript
小满zs14 分钟前
Next.js第十三章(缓存组件)
前端
前端老宋Running38 分钟前
“受控组件”的诅咒:为什么你需要 React Hook Form + Zod 来拯救你的键盘?
前端·javascript·react.js
风止何安啊38 分钟前
拿捏 React 组件通讯:从父子到跨组件的「传功秘籍」
前端·react.js·面试
weixin_4595489039 分钟前
QT+Echarts初始示例
qt·echarts
阿蒙Amon41 分钟前
JavaScript学习笔记:7.数字和字符串
javascript·笔记·学习
懒得不想起名字41 分钟前
将flutter打成aar包嵌入到安卓
前端
Highcharts.js1 小时前
官方文档|Angular 框架集成 Highcharts Dashboards
前端·javascript·angular.js·highcharts·看板·使用文档·dashboards
韭菜炒大葱1 小时前
React 新手村通关指南:状态、组件与魔法 UI 🧙‍♂️
前端·javascript·react.js
天天扭码1 小时前
深入MCP本质——编写自定义MCP Server并通过Cursor调用
前端·mcp