vue tab切换时echarts不显示问题解决方案

使用 vuetify UI,其他UI也是同理。

一、echarts不显示问题原因:

1.tab的绑定事件onChange还是onClick

2.找不到对应id的Dom

二、解决方案

1.看下面的代码,两个事件应该分别在两个标签里加载。这个是我加debugger硬试出来的。

<v-tabs
                          v-model="tab"
                          align-with-title
                          background-color="blue lighten-3"
                          @change="tabsChange(tab)"
                  >
<v-tab
                              v-for="(item,i) in tabItems"
                              :key="i"
                              @click="tabClick(i)"
                      >

事件的执行顺序:click事件才是你点击标签时能触发的方法,之后标签把model里的tab值给改了,再触发change事件。

① 如果只有点击标签tab的情况下才切换,可以只写click事件。

②除了点击标签tab,还有从A标签的画面进去B标签的情况,就需要追加change事件,标记flag从哪里跳转过来的。

③如果有哪个tab不能通过点击进去,只能从其他tab的画面进。tab的写法如下“disable”

                      <v-tab @click="tabClick(2)" disabled>
                          <div
                                  :class="[`text-h6`,'font-weight-medium']"
                                  v-text="tabItems[2]">
                          </div>
                      </v-tab>
      let myecharts = this.$echarts.init(document.getElementById('subecharts0'));
      // tab第二页打开
      myecharts.on('click', (params) => {
        this.km1Index = params.dataIndex;
        this.tab = 1;
        this.tabClickFlg = false;
        this.tabClick(this.tab);
      });

2.图形的渲染一定要在div的Dom加载之后

①一般情况下,每次画echarts之前调用“this.$nextTick”,相当于setTimeout延时执行。

this.$nextTick(() => {
          this.zhutu1wei('subecharts0', stitle, xdata, sdata);
        })

②有tab情况下,需要tab内组件在加载时渲染。组件如果比画图早渲染就显示不出新的图形。利用“v-tab-item”中的“eager” ,作用是将强制组件内容在加载时呈现,如果存在内容的话,则不会在 DOM 中渲染。

 <v-tabs-items v-model="tab">
                      <v-tab-item
                              v-for="(item,i) in tabItems"
                              :key="i"
                              eager
                      >
                          <v-card flat color="blue lighten-5">
                              <v-card-text>
                                
                                      <v-row>
                                          <v-col>
                                              <div :id="'subecharts'+i"
                                                   :style="{width: '900px', height: '500px'}"></div>
                                          </v-col>
                                      </v-row>
                              </v-card-text>
                          </v-card>
                      </v-tab-item>
                  </v-tabs-items>

以上。

Vue中实现一个带有Tab切换ECharts图表,通常需要结合Vue组件化开发的方式,以及ECharts图表库的使用。下面是一个基本的实现流程: 1. **安装ECharts**:首先需要确保你的项目中已经安装了ECharts。如果没有安装,可以通过npm或者yarn来安装。 ```bash npm install echarts --save # 或者 yarn add echarts ``` 2. **创建Vue组件**:在Vue项目中创建一个组件,例如`EChartsTab.vue`。 3. **引入ECharts**:在该组件的`<script>`部分引入ECharts。 ```javascript <script> import * as echarts from 'echarts'; export default { // 组件选项 } </script> ``` 4. **定义ECharts实例和数据**:在组件中定义ECharts实例和需要展示的数据,以及图表的配置选项。 5. **创建Tab切换功能**:通过Vue的数据和方法来创建Tab切换的逻辑。通常需要维护一个当前激活Tab的状态,并在切换更新这个状态。 6. **渲染ECharts图表**:在Vue的`<template>`部分,使用`<div>`标签定义ECharts图表容器,并在Vue的`mounted`钩子中初始化ECharts实例,并根据当前激活的Tab来渲染相应的图表。 7. **响应Tab切换**:在`watch`或者计算属性中监听当前激活Tab的变化,并根据变化来更新ECharts实例的数据和配置,从而重新渲染图表。 8. **导出组件**:最后,导出这个Vue组件,以便在其他组件中使用。 下面是一个简化的代码示例: ```vue <template> <div> <div class="tabs"> <div v-for="tab in tabs" :key="tab.name" class="tab" :class="{ active: currentTab === tab.name }" @click="currentTab = tab.name" > {{ tab.title }} </div> </div> <div ref="echartsContainer" class="echarts-container"></div> </div> </template> <script> import * as echarts from 'echarts'; export default { data() { return { currentTab: 'first', // 当前激活的Tab tabs: [ { name: 'first', title: 'Tab 1' }, { name: 'second', title: 'Tab 2' } ], chartInstance: null }; }, mounted() { this.initChart('first'); }, methods: { initChart(tabName) { // 初始化图表或更新图表配置 if (this.chartInstance) { this.chartInstance.dispose(); // 销毁旧的实例 } const container = this.$refs.echartsContainer; this.chartInstance = echarts.init(container); const option = this.getChartOption(tabName); // 获取对应Tab图表配置 this.chartInstance.setOption(option); }, getChartOption(tabName) { // 根据tabName返回对应的图表配置 if (tabName === 'first') { return { // 第一个TabECharts配置 }; } else if (tabName === 'second') { return { // 第二个TabECharts配置 }; } } } }; </script> <style> /* 你的样式 */ </style> ``` 在这个示例中,我们创建了一个带有两个Tab的简单切换组件,每个Tab对应一个ECharts图表的配置。点击不同的Tab会触发`initChart`方法,根据当前的`currentTab`来初始化或更新ECharts实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值