Vvue Element组件Tabs中使用Echarts折线图出现宽度问题

文章讲述了在Vue项目中,ElementUI的Tabs组件与Echarts结合时,如何解决折线图在非激活Tab下宽度为100px的问题,关键在于调整Echarts的初始化顺序和处理窗口缩放事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、出现的问题

    vue项目 Element UI组件Tabs分页中插入Echarts绘制折线图图表,进入折线图tabs页面折线图宽度只有100px;但是在css定义中折线图宽度是100%;当浏览器窗口大小发生改变时echarts折线图宽度回复正常;

2、为什么会出现这样的问题

    Echarts在页面未渲染时就先页面一步加载了;由于图表在tabs标签页里,跳转页面没有选中tabs标签,没有选中的tabs标签是没有内部元素宽高的;Echarts会在获取不到DOM容器宽高的情况下使用默认的大小(width:100px;)创建图表;

3、解决问题

    调整echarts初始化加载顺序;错误方法:是把Echarts初始化事件放入mounted()里完成初始化;正确方法:在tabs标签事件

Tabs Events

事件名称说明回调参数
tab-clicktab 被选中时触发被选中的标签 tab 实例

中对应的标签内调用Echarts初始化事件

// 标签页tab点击事件

      tabClick(tab, event){

        if(this.activeName=="fourth"){//当tab标签为fourth时

          this.handelSelectLevCapByResId();

          window.addEventListener("resize",()=>{//浏览器窗口的缩放监听

            this.pieChart1.resize();

        })

        }

      },

//获取对应Echarts折线图数据

      handelSelectLevCapByResId(){

        selectLevCapByResId(this.reservoir).then(res=>{

          this.handelChaets();

          this.handelChaets2();

          let data = res.data.data;

          this.tableData=data.levCapAreaList;

          let xData=data.capData.line;

          let seriesData=data.waterLevelData.line;

          this.pieChart1.setOption({

            xAxis: {

              data:xData

            },

            series: [

              {

                type: 'line',

                symbol: 'none',

                smooth: true,

                data:seriesData,

              }

            ],

          });

          let areaData=data.areaData.line;

          this.pieChart2.setOption({

            xAxis: {

              data:areaData

            },

            series: [

              {

                type: 'line',

                symbol: 'none',

                smooth: true,

                data:seriesData,

              }

            ],

          })

        })

      },

// 第一个折线图

      handelChaets(){

        this.pieChart1=echarts.init(document.getElementById('pieChart'));

        this.pieChart1.setOption(this.chartOption);

        window.addEventListener("resize",()=>{

          this.pieChart1.resize();

        })

      },

      // 第二个折线图

      handelChaets2(){

        this.pieChart2=echarts.init(document.getElementById('pieChart2'));

        this.pieChart2.setOption(this.chartOption2);

        window.addEventListener("resize",()=>{

          this.pieChart2.resize();

        })

      },

    },

  };

Vue 3 中使用 ECharts 实现折线图并绑定点击事件,可以通过以下步骤实现: ### 安装与引入 ECharts 首先确保项目中已安装 `echarts` 库,可以使用 npm 或 yarn 进行安装: ```bash npm install echarts --save ``` 或 ```bash yarn add echarts ``` 然后在组件文件中引入 `echarts` 并创建折线图。 ### 创建折线图并绑定点击事件 在 Vue 3 的组合式 API 中,通过 `ref` 获取 DOM 元素,并在 `onMounted` 生命周期钩子中初始化图表。同时,使用 `option` 配置项设置点击事件。 示例代码如下: ```vue <template> <div> <canvas ref="lineChartCanvas" width="600" height="400"></canvas> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import * as echarts from 'echarts'; const lineChartCanvas = ref(null); let chartInstance = null; const initLineChart = () => { // 初始化 ECharts 实例 chartInstance = echarts.init(lineChartCanvas.value); // 设置折线图的配置项 const option = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['一月', '二月', '三月', '四月', '五月'] }, yAxis: { type: 'value' }, series: [ { name: '数据', type: 'line', data: [120, 200, 150, 80, 70], smooth: true } ] }; // 绑定点击事件 chartInstance.on('click', (params) => { console.log('点击了折线图:', params); alert(`您点击了 ${params.name},值为 ${params.value}`); }); // 渲染图表 chartInstance.setOption(option); }; onMounted(() => { initLineChart(); }); </script> ``` ### 动态更新数据并重新渲染图表 如果需要动态更新数据,可以通过修改 `option.series[0].data` 并调用 `setOption` 方法重新渲染图表。 示例代码如下: ```javascript const updateChartData = () => { const newData = [200, 300, 100, 50, 90]; chartInstance.setOption({ series: [ { data: newData } ] }); }; ``` ### 使用 Tabs 切换时重新渲染图表使用 `<el-tabs>` 组件切换标签页时,可以在切换回调函数中触发图表的重新渲染逻辑,以确保图表正确显示。 ```vue <template> <el-tabs v-model="activeName" @tab-click="handleTabClick"> <el-tab-pane label="趋势图" name="first"> <Trend ref="trendChild" /> </el-tab-pane> <el-tab-pane label="666" name="second"> <Wrend ref="wrendChild" /> </el-tab-pane> </el-tabs> </template> <script setup> import { ref } from 'vue'; const activeName = ref('first'); const trendChild = ref(null); const wrendChild = ref(null); const handleTabClick = (tab) => { if (tab.props.name === 'first') { setTimeout(() => { trendChild.value.initEcharts(); }, 100); } else if (tab.props.name === 'second') { wrendChild.value.initEcharts(); } }; </script> ``` 以上方法能够帮助在 Vue 3 中成功集成 ECharts 折线图并绑定点击事件[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值