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

希望可以帮到你们!!

相关推荐
2501_920931707 小时前
React Native鸿蒙跨平台采用ScrollView的horizontal属性实现横向滚动实现特色游戏轮播和分类导航
javascript·react native·react.js·游戏·ecmascript·harmonyos
0思必得08 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5169 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino9 小时前
图片、文件的预览
前端·javascript
2501_9209317010 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
layman052811 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔11 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李11 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN11 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒11 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局